由于查询的敏感性,甚至是信息,我也无法提供确切的代码。因此,我将提供一组代表性的代码。如果我了解它为什么执行其执行方式,就可以找出问题所在。
首先,我确实得到了结果。所以我知道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结果的最后一条记录。
我添加了RecordsReturned,它给了我-1,但是在循环中完成时,我看到它返回相同的结果x记录集中的确切记录数。
我怀疑是执行此操作的ExecuteReader()步骤-已在其中读出结果。我的问题是:我的理论正确吗?如果正确,为什么?当在while循环中运行时,SqlDataReader的Read()基本上应该给我每一行以便每次执行,根据Intellisense的说法,这是事实。所以我的假设是错误的,或者我错过了一些东西。
有什么想法吗?
答案 0 :(得分: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);
}
}
}
}