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);
}
}
}
}
由于查询甚至信息的敏感性,我无法提供准确的代码。所以我会提供一组有代表性的代码。如果我理解它为什么会这样执行,我就能找出问题所在。
首先,我确实得到了结果。所以我知道 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);
}
}
}
}