SqlDataReader 结果不符合预期

SqlDataReader results not as expected

由于查询甚至信息的敏感性,我无法提供准确的代码。所以我会提供一组有代表性的代码。如果我理解它为什么会这样执行,我就能找出问题所在。

首先,我确实得到了结果。所以我知道 SQL 没有任何意义。但是当通过 C# 运行 时,它只返回最后一行。这就是我要解决的问题。

需要

客户希望将 table(约束在别处管理)的全部结果发送到一个文件中。我在代码中执行此操作,因为它由不同的应用程序执行。

using (SqlDataReader reader = cmd.ExecuteReader())
{
   while (reader.Read())
   {
      using (writer = new StreamWriter(output))
      {
         // Some StringBuilder code gets info from the reader and appends to a string called line

         writer.WriteLine(line)

      }
   } 
}

现在,我读这段代码基本上是在说,"ok, while you're reading through rows, you're going to use this StreamWriter and write each row out to a file with a newline"。

不工作的部分——也是让我失望的部分——是它只写了 SQL 结果的最后一条记录。

我添加了 RecordsReturned,它返回 -1,但是在循环中完成时,我看到它返回相同的结果 x 记录集中记录的确切数量。

我怀疑这是执行此操作的 ExecuteReader() 步骤 - 它已经读出了结果。我的问题:我的理论是否正确,如果正确,为什么? SqlDataReader 的 Read(),当在 while 循环中 运行 时,基本上应该按每次执行的顺序给我每一行,根据 Intellisense,这是真的。所以要么我的假设是错误的,要么我遗漏了什么。

有什么想法吗?

每次在循环中创建和使用 StreamWriter 时都会覆盖文件,因此完成后只会保留最后一个。

using (SqlDataReader reader = cmd.ExecuteReader()) {
    if(reader.HasRows) {
        using (var writer = new StreamWriter(output)) { //<-- writer created once
            while (reader.Read()) {
                // Some StringBuilder code gets info from the reader
                // and appends to a string called line

                writer.WriteLine(line);
            }
        }
    } 
}