【问题标题】:SqlDataReader Never Returning FalseSqlDataReader 从不返回 False
【发布时间】:2016-08-05 02:41:01
【问题描述】:

我正在使用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();

【问题讨论】:

    标签: c# sql sqldatareader


    【解决方案1】:

    SqlDataReader.Read 将 reader 推进到下一条记录,只要还有更多行就返回 true;否则false。

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

    【讨论】:

    • 没错。我需要做的是将我的 while 条件更改为 while (eof != false ....)
    【解决方案2】:

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

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

    你的意思可能是:

    eof = !reader.Read();
    

    【讨论】:

    • 你是对的 - 我的真假颠倒了 eof 值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多