c# SqlDataReader 重复最后一行数据
c# SqlDataReader repeating final row of data
我正在使用 SqlDataReader 读取自定义类型的集合,但我得到的只是 DataTable 的最后一行重复,而不是完整的 table 信息。将不胜感激。
using (connection)
{
using (SqlCommand command = new SqlCommand(query, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
lineData.Column1 = reader.GetValue(0).ToString();
lineData.Column2 = reader.GetValue(1).ToString();
lineData.Column3 = reader.GetValue(2).ToString();
lineData.Column4 = reader.GetValue(3).ToString();
lineData.Column5 = reader.GetValue(4).ToString();
lineData.Column6 = reader.GetValue(5).ToString();
lineData.Column7 = reader.GetValue(6).ToString();
lineData.Column8 = reader.GetValue(7).ToString();
columnData.Add(lineData);
}
}
}
}
foreach (var item in columnData)
{
Label.Text += item.Column1.ToString() + item.Column2.ToString() + item.Column3.ToString() + item.Column7.ToString();
}
lineData
应该在 while 循环中声明。如果它是在您上传的代码之前声明的,那么您正在为每个数据行引用相同的实例。
尝试将代码更改为以下内容;
while (reader.Read())
{
lineData = new LineData();//like that
lineData必须在那个时候的循环中声明。如果它是在您上传的代码之前声明的,您将对每一行数据使用相同的实例。尝试更改以下代码;
我正在使用 SqlDataReader 读取自定义类型的集合,但我得到的只是 DataTable 的最后一行重复,而不是完整的 table 信息。将不胜感激。
using (connection)
{
using (SqlCommand command = new SqlCommand(query, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
lineData.Column1 = reader.GetValue(0).ToString();
lineData.Column2 = reader.GetValue(1).ToString();
lineData.Column3 = reader.GetValue(2).ToString();
lineData.Column4 = reader.GetValue(3).ToString();
lineData.Column5 = reader.GetValue(4).ToString();
lineData.Column6 = reader.GetValue(5).ToString();
lineData.Column7 = reader.GetValue(6).ToString();
lineData.Column8 = reader.GetValue(7).ToString();
columnData.Add(lineData);
}
}
}
}
foreach (var item in columnData)
{
Label.Text += item.Column1.ToString() + item.Column2.ToString() + item.Column3.ToString() + item.Column7.ToString();
}
lineData
应该在 while 循环中声明。如果它是在您上传的代码之前声明的,那么您正在为每个数据行引用相同的实例。
尝试将代码更改为以下内容;
while (reader.Read())
{
lineData = new LineData();//like that
lineData必须在那个时候的循环中声明。如果它是在您上传的代码之前声明的,您将对每一行数据使用相同的实例。尝试更改以下代码;