SqlDataReader 的结果与预期不符



由于查询的敏感性,甚至信息,我无法提供确切的代码。 因此,我将提供一组具有代表性的代码。 如果我了解它为什么以这种方式执行,我就可以找出问题所在。

首先,我确实得到了结果。 所以我知道SQL什么都没有。 但是当运行 C# 时,它只返回最后一行。 这就是我要排除故障的问题。

需求

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

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结果的最后一条记录。

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

我怀疑这是 ExecuteReader(( 步骤在执行此操作 - 它已经读出了结果。 我的问题是:我的理论是否正确,如果是,为什么? Read(( 关闭 SqlDataReader 时,当在 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);
}
}
} 
}

相关内容

  • 没有找到相关文章

最新更新