1

我的asp.net應用程序出現了一個奇怪的問題。總之,我有一個sql命令,取決於其他sql命令的結果。這個鏈中有五個sql命令,但問題發生在第四個。Asp.Net SqlDataReader的值在試圖訪問和使用時奇蹟般地變爲null

第5條命令必須將數據保存到歸檔表中。當它必須運行並從第4個命令中取得值completion_date時,它會拋出一個空引用異常。其實它說,Reader4 [0]不能被讀取,因爲它有空值。這是錯誤的,因爲它有價值,因爲在數據庫中這些查詢工作正常,也因爲條件如果(Reader4.HasRows == true)是真的,這意味着WHERE聲明在第四個命令是真實的,這也是包括檢查completion_date!這個asp.net有什麼問題?

Command4 = new SqlCommand("SELECT trade_date FROM Schedule WHERE [email protected] AND [email protected] AND [email protected] AND status_id=1 AND completion_date IS NOT NULL", Connection4); //note the completion_date check 
Command4.Parameters.Add("@traiderID", Convert.ToInt32(Reader3[0])); 
Command4.Parameters.Add("@positionID", CurrentPosition); 
Command4.Parameters.Add("@goodID", Convert.ToInt32(Reader1[0])); 
Reader4 = Command4.ExecuteReader(); 
if (Reader4.HasRows == true) //this check is done successfully 
{ 
    Command5 = new SqlCommand("INSERT INTO Archive (traider_id, good_id, completion_date) VALUES (@traiderID, @goodID, @completionDate)", Connection5); 
    Command5.Parameters.Add("@traiderID", Convert.ToInt32(Reader3[0])); 
    Command5.Parameters.Add("@goodID", Convert.ToInt32(Reader1[0])); 
    Command5.Parameters.Add("@completionDate", Convert.ToDateTime(Reader4[0])); //Here is the problem 
    Command5.ExecuteNonQuery(); 
} 
Reader4.Close(); 

任何想法,傢伙?我一直在試圖找出問題所在。這段代碼是唯一可能出錯的地方,但Reader4的值如何變成空值?它在表中不爲null,即使Command4被執行也不爲null!

回答

2

你從哪裏開始從reader讀取?

即你在哪裏打電話

Reader4.Read(); 

Reader4 = Command4.ExecuteReader(); 
+0

Oooohh,daaaammn!難以置信的!男人,我想我顯然已經完全勞累了兩天沒有睡覺)我怎麼錯過了!!!))謝謝。真的覺得很愚蠢。你的答案。並抓+1) – SWA

+1

沒問題。我發現這樣的錯誤的原因是大塊代碼。嘗試分割更多。 –

+0

是的,那是真的。 – SWA

相關問題