从SQL Server返回值到C#转换ToArray

本文关键字:转换 ToArray 返回值 SQL Server | 更新日期: 2023-09-27 18:27:57

我目前正在处理一项赋值,试图从SQL Server数据库中获取值并将其存储在数组中。我的连接很好,但在将返回的值放入数组时遇到了问题。

以下是我所得到的,自从我提出这个问题以来,我已经改变了一点:

public int Bay;
int temp;
[DataContract]
public Garage()
{
    List<Garage> Bays = new List<Garage>();
    SqlConnection connection = new SqlConnection("Data   Source=fastapps04.qut.edu.au;Initial Catalog=*******;User ID=******;Password=******");
    connection.Open();
    SqlCommand command = new SqlCommand("SELECT Bay FROM Garage", connection);
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        temp = reader.GetOrdinal("Bay");
        Bays.Add(temp);
    }
    Bays.ToArray();
    reader.Close();
    connection.Close();
}

在中获取错误

Bays.Add(temp)

从SQL Server返回值到C#转换ToArray

每次对reader.Read()的调用都会将读取器推进到结果集的下一行。您似乎已经假设可以通过一次读取将所有行都放入数组中。

如果您更改代码,以便在while循环的每次迭代中将temp添加到数组中,您应该会发现它是有效的。

我会键入代码,但我在打电话。:)

将Bays更改为List<int>,然后返回列表或调用列表上的.ToArray()。另外,将Using语句与连接和命令一起使用。

   List<int> Bays = new List<int>(); 
   using(SqlConnection connection = new SqlConnection("connString"))
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand("SELECT Bay FROM Garage", 
                                                                       connection))
        {
            using (SqlDataReader reader= command.ExecuteReader())
            {
                while (reader.Read()) 
                {
                    Bays.Add(reader.GetInt32(reader.GetOrdinal("Bay")));
                }         
            }
        } 
     }
     ..... 

为了获得所需的结果,只需对代码进行少量修改。

 public Garage()
{
    SqlConnection connection = new SqlConnection("Data   Source=fastapps04.qut.edu.au;Initial Catalog=*******;User ID=******;Password=******");
    connection.Open();
    SqlCommand command = new SqlCommand("SELECT Bay FROM Garage", connection);
    SqlDataReader reader = command.ExecuteReader();
    List<Garage> listBays =new List<Garage>();
    while (reader.Read())
    {
        temp = reader.GetInt32(reader.GetOrdinal("Bay"));
        listBays.Add(temp);
    }
    Garage[] Bays=listBays.ToArray();
    reader.Close();
    connection.Close();
}