1. ホーム
  2. c#

[解決済み] ストアドプロシージャを戻り値で呼び出す

2023-05-04 21:32:07

質問

C# Windows アプリケーションからストアドプロシージャを呼び出そうとしています。ストアドプロシージャは、SQL Server 2008のローカルインスタンスで実行されています。ストアドプロシージャを呼び出すことはできますが、ストアドプロシージャから値を取得することができません。このストアドプロシージャは、シーケンス内の次の番号を返すことになっています。私はオンラインで調査を行い、私が見たすべてのサイトは、このソリューションが動作することを指摘しています。

ストアドプロシージャのコードです。

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

ストアドプロシージャを呼び出すコード。

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();

を使うことも試してみました。 DataSet を使用しても同じ結果になりました。ストアドプロシージャから戻り値を取得するために を取得するために何が足りないのでしょうか?もっと情報が必要であれば、教えてください。

どのように解決するのですか?

コマンドにreturnパラメータを追加する必要があります。

using (SqlConnection conn = new SqlConnection(getConnectionString()))
using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = parameterStatement.getQuery();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("SeqName", "SeqNameValue");

    var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
    returnParameter.Direction = ParameterDirection.ReturnValue;

    conn.Open();
    cmd.ExecuteNonQuery();
    var result = returnParameter.Value;
}