1

コードを使用して、2 つの出力パラメーターと 1 つの入力パラメーターを持つストアド プロシージャを呼び出しています。しかし、このストアド プロシージャを呼び出すたびにエラーが発生します。

CREATE PROCEDURE [dbo].[usp_StoredProcName]
@inputVal nvarchar(255),
@isError bit OUTPUT,
@errorInfo nvarchar(255) OUTPUT
AS BEGIN
DECLARE @totalRow int = 0;
DECLARE @inputValID uniqueidentifier;

SET @isError = 1;
SET @errorInfo = '';

SELECT @inputValID = [inputValID]
FROM testTable
WHERE inputVal = @inputVal;

IF @inputValID IS NULL
BEGIN
SET @isError = 0;
SET @errorInfo = 'inputVal not found';
RETURN
END
END

いくつかの C# メソッドを使用してストアド プロシージャを呼び出しましたが、すべてこのエラーが返されます。

プロシージャまたは関数 'usp_StoredProcName' には、指定されていないパラメーター '@inputVal' が必要です。

C# メソッド 1 (ストアド プロシージャを呼び出す)

using (SqlConnection con = new SqlConnection(myFullConncectionStringToDB))
{
using (SqlCommand cmd = new SqlCommand("usp_StoredProcName", con))
{
cmd.CommandType = CommandType.StoredProcedure;

  cmd.Parameters.AddWithValue("@inputVal", "MyParamVal_12345");

  cmd.Parameters["@isError"].Direction = ParameterDirection.Output;
  cmd.Parameters["@errorInfo"].Direction = ParameterDirection.Output;

  con.Open();
  cmd.ExecuteNonQuery();

  var isError = cmd.Parameters["@isError"].Value;
  var errInfo = cmd.Parameters["@errorInfo"].Value;
  con.Close();
}
}

方法 2 (ストアド プロシージャを呼び出す)

SqlConnection con = new SqlConnection(myFullConncectionStringToDB);
SqlCommand cmd = new SqlCommand("usp_StoredProcName", con);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter in_parm = new SqlParameter("@inputVal", SqlDbType.NVarChar);
in_parm.Size = 255;
in_parm.Value = "MyParamVal_12345";
in_parm.Direction = ParameterDirection.Input;
cmd.Parameters.Add(in_parm);

SqlParameter out_parm = new SqlParameter("@errorInfo", SqlDbType.NVarChar);
out_parm.Size = 255;
out_parm.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(out_parm);

SqlParameter out_parm1 = new SqlParameter("@isError", SqlDbType.Bit);
out_parm1.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(out_parm1);

con.Open();
cmd.ExecuteNonQuery();
con.Close();

私が試した上記の方法はどちらも同じエラーを返します。

Procedure or function 'usp_StoredProcName' expects parameter '@inputVal', which was not supplied.

ストアド プロシージャを実行するために C# コードで何が間違っているのか教えてください。

両方のメソッドでパラメーター値を明確に渡していますが、なぜこのエラーが発生し続けるのかわかりません。

ご協力ありがとうございました。

4

1 に答える 1