5

使える

int blah = Convert.ToInt32(cmd.ExecuteScalar());

sproc の最後のステートメントが次の場合:

RETURN @value

動作する場合にのみ動作させることができます:

@値を選択

また、これによりオブジェクトの null 例外が発生します。

int blah = (int)cmd.ExecuteScalar();

convert.toint32 と (int) は同じものではありませんが、一方は他方のラッパーですか?

4

2 に答える 2

8

いいえ、あなたがすることはできません。ExecuteScalar() メソッドは、結果セットで返される単一の値として返すように設計されています。基本的には1行目の1列目の値が返ってきました。

戻り値を取得するには、SQLCommand オブジェクトにパラメーターを追加する必要があります。「@RETURN_VALUE」という名前を使用し、パラメーター オブジェクトを作成するときに Return のパラメーター方向を指定します。その後、ExecuteNonQuery() メソッドを使用できます。

IMO、ストアド プロシージャの戻り値は、単にプロシージャのステータスを示す必要があることに注意する必要があります。すべてのデータは、結果セットまたは出力パラメーターを介して返される必要があります。

于 2009-02-06T15:38:00.073 に答える
3

他の質問に答えるために、(int)はキャストであり、実際には変換(Convert.ToInt32)とは異なります。

キャストでは、キャストされているオブジェクトは実際にはキャスト先のタイプであるため、実際の変換/解析は行われないと言っているようなものです。intをnullにすることはできないため、キャストしているオブジェクトがnullの場合、キャストは無効になり、例外がスローされます。

変換を使用すると、実際に解析とロジックが実行され、変換されるオブジェクトがnullである状況が処理されます。

これについての詳細はここにあります

于 2009-02-06T16:06:34.820 に答える