2011-02-10 91 views
0

我有一個aspx頁面,它允許用戶將修改後的條目提交到數據庫中,但是當用戶單擊Submit來觸發存儲過程時,我想首先運行檢查以查看是否存在具有相同關係的修改過的行。如何檢查datareader爲空?

我傳遞以下查詢的結果:

SELECT SwitchRoom.ModifiedID FROM SwitchRoom WHERE 
    SwitchRoomID = @ChkSwitchRmID", constring; 

DataReader以確定是否存在關係。

我需要它來確定讀取器是否返回NULL以允許過程執行,如果不是,則不允許用戶保存信息。

我已經試過如下:

if (dbreader = NULL) 
{ 
Fire Procedure 
} 
else 
{ 
"Error Message" 
} 

,我甚至已經試過路過讀者進入一個datatable並運行它針對的是沒有任何的運氣。

如何檢查DataReader的結果是否爲null

回答

4

嘗試if (!dbReader.Read() || dbreader.IsDbNull(field)} { .. }

+0

太棒了!剛試過這個,它實現了一個夢想。感謝您的意見。 – 2011-02-11 14:16:26

4

讀者將不會返回一個空的對象,要了解讀者返回任何行,你可以使用if(dbreader.Read())

5

我更喜歡使用的ExecuteScalar與計數匹配行的查詢:

"SELECT count(*) FROM SwitchRoom WHERE SwitchRoomID = @ChkSwitchRmID" 

然後比較執行標量的結果爲零。不需要空檢查。

如果您確實想使用reader方法,您可以使用以下屬性來檢查它是否有任何行。即使它不返回任何東西,該對象也不會爲空。

if (dbReader.HasRows) {....} 
2

您正在尋找DBNull類型。數據庫不會發送實際的空引用,它們會在C#中發送特殊的數據類型來表示數據庫的NULL值。

0

所以基本上,你要知道,如果

SELECT SwitchRoom.ModifiedID 
FROM SwitchRoom 
WHERE SwitchRoomID = @ChkSwitchRmID 

返回任何記錄?

讀者永遠不會空。您需要檢查閱讀器是否包含沒有要讀取的記錄。

if (!dbReader.Read()) 
{ 
    // execute procedure 
} 
else 
{ 
    // error 
}