【问题标题】:c# SqlDataReader repeating final row of datac# SqlDataReader 重复最后一行数据
【发布时间】:2017-08-11 04:11:00
【问题描述】:

我正在使用 SqlDataReader 读取自定义类型的集合,但我得到的只是重复的 DataTable 的最后一行,而不是完整的信息表。我们将不胜感激。

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();
        }

【问题讨论】:

  • 代码似乎没问题...您可以上传您的结果(例如屏幕截图)。你在哪里声明 columnData 以及为什么在循环之外?

标签: c# sql while-loop sqldatareader


【解决方案1】:

lineData 应该在 while 循环中声明。如果它是在您上传代码之前声明的,那么您为每个数据行引用相同的实例。 尝试将代码更改为以下;

while (reader.Read())
                {
                    lineData = new LineData();//like that

【讨论】:

  • 知道这很愚蠢。谢谢!
【解决方案2】:

lineData 必须在当时的循环中声明。如果它是在你上传的代码之前声明的,那么你为每一行数据提供同一个实例。尝试更改以下代码;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多