SqlDataReader永远不会返回false。

3
我正在使用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();
2个回答

2

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

一个明显的错误是您将错误的值赋给了eof。当还有数据时,您将true赋给了eof,而在没有任何数据时,则将false赋给了eof

您可能想表达的意思是:

eof = !reader.Read();

你是对的 - 我把 eof 值的 true 和 false 搞反了。 - Missy

2

SqlDataReader.Read 方法使读取器前进到下一条记录,只要有更多的行,它就会返回 true ;否则返回false

问题出在你的循环条件上,它仅执行一次(即使还有更多的行),请修改你的 while 条件并作出相应的修改。


没错。我需要做的是将我的while条件更改为while (eof!= false ...)。 - Missy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接