SqlDataReader结果与预期不符

问题描述 投票:0回答:1

由于查询的敏感性质,甚至信息,我也无法提供确切的代码。因此,我将提供一组代表性的代码。如果我了解其执行方式的原因,就可以解决问题。

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

The Need

客户希望将表的整个结果(约束在其他位置进行管理)发送到文件中。我正在用代码执行此操作,因为它是由其他应用程序执行的。

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)

      }
   } 
}

现在,我阅读这段代码基本上是说,“好吧,当您阅读行时,您将使用此StreamWriter并将每一行写到带有换行符的文件中”。

不起作用的部分-以及让我不满意的是-它只写了SQL结果的最后一条记录。

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

我怀疑是执行此操作的ExecuteReader()步骤-已经在其中读取了结果。我的问题是:我的理论正确吗?为什么?当在while循环中运行时,SqlDataReader的Read()基本上应该给我每一行以便于每次执行,根据Intellisense的说法,这是事实。所以要么我的假设是错误的,要么是我遗漏了一些东西。

有什么想法吗?

c# sqldatareader
1个回答
0
投票

每次创建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);
            }
        }
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.