我使用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();
答案 0 :(得分:2)
我不完全理解你所描述的行为,但我怀疑你是误解了你的观察。
一个明显的错误是您将错误的值分配给eof
。您仍然在数据时将true
分配给eof
,而在没有数据时分配false
。
你可能意味着:
eof = !reader.Read();
答案 1 :(得分:2)
SqlDataReader.Read
将读者提升到下一条记录,只要有更多行,就会返回true
;否则false
。
问题在于循环条件,它只执行一次(即使有更多行),修改你的while条件并修改它。