SqlDataReader 从不返回 False

SqlDataReader Never Returning False

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

问题是 reader.Read() 对我来说永远不会 returns false 所以 eof 永远不会设置为 false。在文件末尾,当我尝试写入 header 时出现错误,因为 reader 是空的。

具体报错信息为:

Invalid attempt to read when no data is present.

请查看我的代码,如果可以的话请提供帮助。

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();

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

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

你的意思可能是:

eof = !reader.Read();

SqlDataReader.Read 前进 reader 到下一条记录, returns true 只要有更多的行;否则 false.

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