2011-04-05 40 views
2

因此,我接管了這個項目,一個頁面拋出了很多錯誤。我需要重構整個事情,但總是時間是一個問題。檢查datareader是否爲空或沒有行? ASP.NET

在一種情況下,代碼檢查是否有數據讀取器有任何行,如果不是,則轉到錯誤頁面。然而,由於代碼是現在的DataReader可以爲空(沒有成功連接到數據庫),並在這些情況下,我不能使用

if (!dr.HasRows) 
// 

具有因這顯然給了我「的NullReferenceException是由代碼未處理的」。我試過!博士,但同樣的事情。

代碼的一部分是像

SqlDataReader dr = null; 
try 
{ 
//connect to db etc 
dr = DbHelper.GetReader("sp_GetCustomer", param); 
} 
catch 
{ 
//show an error message 
} 

// and then: 
if (!dr.HasRows) 
{ 

} 

有什麼建議?

在此先感謝。

+0

如何把dr.hasrows的嘗試,以及和處理的錯誤呢? – 2011-04-05 13:10:17

+1

@Elad:不! *避免*明顯的例外,不要抓住它們。 – 2011-04-05 13:14:08

+0

@Dan Puzey - 當然,但事情發生了。你永遠不會知道,如果發生了具體的事情,我寧願去捕捉它,也不願意......給出某種類型的智能錯誤。 – 2011-04-05 13:16:36

回答

9

什麼:

if (dr == null || !dr.HasRows) { 
    // Do something 
} 
+0

我認爲那會評估!dr.HasRows,無論如何,不​​是嗎? – 2011-04-05 13:11:33

+0

當然,我已經厭倦了處理這個混亂。謝謝 – Nick 2011-04-05 13:12:01

+1

@Elad:不,在C#中只會根據需要檢查if語句的其他參數。這被稱爲「短路」。您可以閱讀更多[這裏](http://msdn.microsoft.com/en-us/library/6373h346%28v=vs.71%29.aspx)。 – FreeAsInBeer 2011-04-05 13:13:42

2

一種可能性是:

SqlDataReader dr = null; 
try 
{ 
    //connect to db etc 
    dr = DbHelper.GetReader("sp_GetCustomer", param); 
    if (!dr.HasRows) 
    { 

    } 
} 
catch 
{ 
//show an error message 
}