2009-06-15 21 views
0

SQL Serverストアドプロシージャの実行結果を.NETコードに戻す最善の方法は何ですか?SQL Serverストアドプロシージャの結果を.Netに返す方法

トランザクションで削除の成功または失敗を返す場合は、「選択」するか、RETURN(1)またはRETURN(0)のようなものを選択するか、影響を受けた?

これはExecuteNonQuery()の戻り値ですか?

答えて

2

ExecuteNonQueryは、 RETURN(1)またはRETURN(0)する必要はありません。

トランザクションで一連の削除を実行していて、それが失敗した場合は、SqlExceptionがスローされ、実際に結果を返す必要はありません。ちょうど例外をキャッチし、代わりにそれを処理します。

あなたの質問に答えるために、最後に実行されたステートメントの影響を受けたレコードの数が具体的であれば、ExecuteNonQueryを使用するのが最適です。他のより具体的な結果が必要な場合は、返されたSqlParameterでSqlCommandを使用し、戻り値のパラメータで特定の値を返すことをお勧めします。

+0

RETURNは、最後に実行されたステートメントの影響を受けるレコードの数以外の特定の結果を返す必要があるときに最もよく使用されます。戻り値を取得するには、SqlParameterを返すSqlCommandを使用する必要があります。 – Fung

1

はい、ExecuteNonQuery()を使用すると、影響を受ける行の数が返されます。ストアドプロシージャで返す値を指定する場合は、ExecuteScalary()を使用できます。

出力パラメータを使用して値を返すこともできます。 SQLプロシージャーで、パラメーターを出力パラメーター(例:@ret int output)として宣言します。 .NETコードでは、パラメータの方向を出力に設定します。 ExecuteNonQueryは、トランザクションで実行されたLASTの挿入、更新、または削除の影響を受ける行の数を常に返します。実行行の後に、 ".Value"プロパティを読み取ってこの値を確認できます。

+0

感謝を出力パラメータを使用することができ、特定のシナリオでは、より詳細な出力を提供するには、は、ExecuteScalarの値を返すための最良の方法は、()は何ですか? RETURNを使って? – CRice

+1

ExeculteScalarを使用して値を返すには、SELECT @@ the_value_you_want_to_returnを実行します。あなたが実行しているSQLの最後の文でなければなりません。しかし、内部的にはデータレアが使用されているので、これは最も効率的な方法ではありません。パフォーマンスが本当に重要な場合は、SqlParameterを返すSqlCommandを使用します。私はパフォーマンスの向上は本当に本当に小さいと言うだろうが。 – Fung

+0

ExecuteScalarを使用する場合は、SELECTを使用して行数を返すことができます。 –

1

SPが正常に完了したことを示す戻り値0の問題を示すために使用される戻り値が頻繁に表示されます。私は通常、エラー自体が例外を生成しない場所で何が起こったのかに関する情報を返すために使用します。私のアプリケーションのほとんどには、私が再利用する標準的なリターンコードがあります。

は、あなたがして、同様

関連する問題