SqlDataReader永远不会返回False

时间:2016-08-05 02:41:02

标签: c# sql sqldatareader

我使用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 个答案:

答案 0 :(得分:2)

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

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

你可能意味着:

eof = !reader.Read();

答案 1 :(得分:2)

SqlDataReader.Read将读者提升到下一条记录,只要有更多行,就会返回true;否则false

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