C# で値を返すストアド プロシージャを呼び出す場合、コード内で戻り値を正しく処理することが重要です。この記事では、この問題について説明し、ストアド プロシージャから戻り値を正常に取得するための解決策を提供します。
C# アプリケーションは、シーケンス内の次の値を返すストアド プロシージャを呼び出す必要があります。オンラインで解決策に従っているにもかかわらず、戻り値を取得できません。提供されるコード スニペットには、SqlCommand オブジェクトの作成、コマンド テキストとしてストアド プロシージャの指定、SqlConnection を使用したコマンドの実行が含まれています。ただし、ストアドプロシージャの戻り値は取得されません。
<code class="language-sql">ALTER procedure [dbo].[usp_GetNewSeqVal] @SeqName nvarchar(255) as begin declare @NewSeqVal int set NOCOUNT ON update AllSequences set @NewSeqVal = CurrVal = CurrVal+Incr where SeqName = @SeqName if @@rowcount = 0 begin print 'Sequence does not exist' return end return @NewSeqVal end</code>
<code class="language-csharp">SqlConnection conn = new SqlConnection(getConnectionString()); conn.Open(); SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param = new SqlParameter(); param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar); param.Direction = ParameterDirection.Input; param.Value = "SeqName"; SqlDataReader reader = cmd.ExecuteReader();</code>
ストアド プロシージャの戻り値を取得するには、ReturnValue 方向のパラメーターを SqlCommand オブジェクトに追加する必要があります。これは、変数を宣言し、ストアド プロシージャの戻り値をそれに割り当てるようにコマンドに指示します。次のコードは解決策を示しています:
<code class="language-csharp">using (SqlConnection conn = new SqlConnection(getConnectionString())) using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = parameterStatement.getQuery(); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("SeqName", "SeqNameValue"); // @ReturnVal 可以是任何名称 var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int); returnParameter.Direction = ParameterDirection.ReturnValue; conn.Open(); cmd.ExecuteNonQuery(); var result = returnParameter.Value; }</code>
以上がC# でストアド プロシージャの戻り値を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。