SqlDataReader从不返回False

本文关键字:False 返回 SqlDataReader | 更新日期: 2023-09-27 18:00:13

我正在使用SqlDataReader编写一个包含多个工作表的Excel工作簿。每个工作表都有一个页眉、一个正文和一个页脚,所以我在while循环中使用while循环。

问题是reader.Read()对我来说永远不会返回false,所以eof永远不会设置为false。在文件的末尾,由于读卡器是空的,所以在尝试写入标头时出现错误。

具体错误消息为:

不存在数据时读取的尝试无效。

请查看我的代码并在可能的情况下提供帮助。

reader = cmd.ExecuteReader();
bool eof = false;
bool first = true;
while (!eof)
{
    // write a header 
    // set newHeaderCondition from the Reader -- error occurs here
    if (first)
    {
        reader.Read();
        first = false;
    }
    do
    {
        // write row onto spreadsheet
        eof = reader.Read();   ---- THIS IS NEVER FALSE
    } while (!eof && (reader[0] == newHeaderCondition ));
    // write footer that doesn't contain any reader data
    if (!eof )
    {
        // create a new worksheet
    }
}
reader.Close();

SqlDataReader从不返回False

SqlDataReader.Read将读取器前进到下一条记录,只要有更多的行,就返回true;否则为CCD_ 5。

问题出在循环条件上,它只执行一次(即使有更多行),修改while条件并修改它。

我不完全理解你描述的行为,但我怀疑你误解了你的观察结果。

一个明显的错误是您给eof分配了错误的值。当仍有数据时,将true分配给eof,当没有数据时,则将false分配给CCD。

你的意思可能是:

eof = !reader.Read();