2016-08-05 99 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