C# SqlDataReader从不返回False
我正在使用C# SqlDataReader从不返回False,c#,sql,sqldatareader,C#,Sql,Sqldatareader,我正在使用SqlDataReader编写包含多个工作表的Excel工作簿。每个工作表都有页眉、正文和页脚,所以我在while循环中使用while循环 问题是reader.Read()从未为我返回false,因此eof从未设置为false。在文件的末尾,当我试图写入头时,我得到一个错误,因为读卡器是空的 具体的错误消息是: 当不存在数据时尝试读取无效 请查看我的代码,如果可以,请提供帮助 reader = cmd.ExecuteReader(); bool eof = false; bool fi
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();
我不完全理解你描述的行为,但我怀疑你误解了你的观察结果 一个明显的错误是给
eof
分配了错误的值。当仍有数据时,将true
分配给eof
,当没有数据时,将false
分配给eof
你可能是说:
eof = !reader.Read();
使读取器前进到下一条记录,并返回true
,只要有更多行;否则false
问题在于循环条件,它只执行一次(即使有更多行),修改while条件并修改它 没错。我需要做的是将while条件更改为while(eof!=false…)你是对的-我得到了eof值的true和false颠倒