2016-08-05 100 views
3

我使用SqlDataReader写有几个工作表的Excel工作簿。每个工作表都有一个头文件,一个主体和一个页脚,所以我在while循环中使用了一个while循环。SqlDataReader的决不返回false

的问题是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

SqlDataReader.Read进步读者到下一条记录,并且只要有更多的行返回true;否则为false

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

+0

没错。我需要做的是改变我的条件while(eof!= false ....) – Missy

+0

这是正确的:-) –

2

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

一个明显的错误是,你分配了错误的价值eof。您正在分配trueeof时仍有数据,并false,当没有任何。

你大概的意思是:

eof = !reader.Read(); 
+0

你是对的 - 我有我的真假颠倒的EOF值 – Missy