2011-02-10 2 views
0

変更されたエントリをデータベースに送信できるaspxページがありますが、ユーザーがSubmitをクリックしてストアドプロシージャを起動すると、最初に同じ関係の変更された行が存在するかどうかを確認します。その関係が存在するかどうかを決定するためにDataReadernullのためにデータウェアハウスをチェックするにはどうすればよいですか?

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

私は、次のクエリの結果を渡しています。

手順が実行されるようにリーダーがNULLを返すかどうかを判断する必要があります。そうでない場合は、ユーザーが情報を保存することを許可しません。

私は次のことを試してみた:

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

をし、私もdatatableにリーダーを渡すと、任意の運なしでそれに対してそれを実行してみました。

nullのDataReaderの結果を確認するにはどうすればよいですか?

答えて

4

読者はあなたが私が一致する行をカウントクエリでは、ExecuteScalarを使用して好むif(dbreader.Read())

+0

素晴らしい!ちょうどこれを試して、それは夢を動作させる。入力いただきありがとうございます。 –

4

をお試しください:

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

次に、Executeスカラーの結果をゼロと比較します。ヌルチェックは必要ありません。

リーダーメソッドを実際に使用する場合は、次のプロパティを使用して行があるかどうかを調べることができます。何も返さなくてもオブジェクトはnullになりません。

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

を使用することができます任意の行を返した場合Readerが調べるには、nullオブジェクトを返しませんif (!dbReader.Read() || dbreader.IsDbNull(field)} { .. }

2

あなたはDBNull型を探しています。データベースは実際のヌル参照を送信しません。データベースNULL値を表すためにC#で特殊なデータ型を送信します。

0

だから基本的に、あなたは

SELECT SwitchRoom.ModifiedID 
FROM SwitchRoom 
WHERE SwitchRoomID = @ChkSwitchRmID 

は、すべてのレコードを返すかどうかを知りたいですか?

読者は絶対に決してnullにはなりません。代わりに、読者に読み取るレコードがないことを確認する必要があります。

if (!dbReader.Read()) 
{ 
    // execute procedure 
} 
else 
{ 
    // error 
} 
関連する問題