SPROCがRETURN @valueを使用する場合、あなたはcmd.ExecuteScalarを使用することができます
-
21-08-2019 - |
質問
あなたが使用することはできます。
int blah = Convert.ToInt32(cmd.ExecuteScalar());
のSPROCの最後の文がない場合:
RETURN @value
それがない場合は、私はそれが仕事を得ることができます:
SELECT @value
また、これは私のオブジェクトはnull例外を与えます:
int blah = (int)cmd.ExecuteScalar();
convert.toint32及び(int型)と同じものではありませんが、1つは、他のラッパーです?
解決
いいえ、あなたがすることはできません。 ExecuteScalar()メソッドは、結果セットに返される単一の値として返すように設計されています。基本的に、最初の行の最初の列の値が返されます。
の戻り値を取得するには、あなたのSqlCommandオブジェクトにパラメータを追加する必要があります。名前「@RETURN_VALUE」を使用し、パラメータオブジェクトを作成するときにリターンのパラメータ方向を指定します。あなたが、その後は、ExecuteNonQuery()メソッドを使用することができます。
私はIMO、ストアドプロシージャの戻り値は、単に手続きの状況を示すべきであることに注意しなければなりません。すべてのデータは、結果セットや出力パラメータを通じて返されなければなりません。
他のヒント
あなたの他の質問、(int)を答えるために、現実には、変換(Convert.ToInt32)と異なるキャストです。
キャストでは、ソートの対象となるキャストは本当にあなたがそう本当変換/解析が行われていないにキャスティングされているタイプであることを言っています。 intはnullにキャストすることはできませんので、あなたがキャスティングされたオブジェクトがnullの場合、例外がスローされたときは無効です。
変換して、いくつかのactualy解析するとロジックが起こり、それが変換されるオブジェクトがnullである状況を処理します。