从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)
每次对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();
}