0

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

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

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

に変換して、DataReaderその関係が存在するかどうかを判断します。

リーダーがプロシージャの実行を許可するために戻るかどうかを判断するために必要ですNULL。そうでない場合は、ユーザーが情報を保存することを許可しません。

私は次のことを試しました:

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

そして、リーダーを a に渡して、datatableそれに対して実行しようとしましたが、運がありませんでした。

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

4

5 に答える 5

5

一致する行をカウントするクエリで ExecuteScalar を使用することを好みます。

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

次に、Execute scalar の結果をゼロと比較します。null チェックは不要です。

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

if (dbReader.HasRows) {....}
于 2011-02-10T23:30:09.937 に答える
4

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

于 2011-02-10T23:28:04.403 に答える
4

リーダーは null オブジェクトを返しません。リーダーが使用できる行を返したかどうかを確認するにはif(dbreader.Read())

于 2011-02-10T23:29:58.203 に答える
2

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

于 2011-02-10T23:30:37.957 に答える
0

基本的に、あなたが知りたいのは

SELECT SwitchRoom.ModifiedID
FROM SwitchRoom
WHERE SwitchRoomID = @ChkSwitchRmID

レコードを返しますか?

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

if  (!dbReader.Read())
{
    // execute procedure
}
else
{
    // error
}
于 2011-02-10T23:31:22.230 に答える