web-dev-qa-db-ja.com

提供されていないパラメータ '@ID'が必要ですか?

IDをoutparameterとして送信していますが、エラーが発生しています

System.Data.SqlClient.SqlException:プロシージャまたは関数 'usp_ClientHistoryItem'には、指定されていないパラメーター '@ID'が必要です。

コード

 using (SqlCommand cmd = new SqlCommand("dbo.usp_ClientHistoryItem", conn))
 {
      SqlParameter parameterID = new SqlParameter("@ID", oReservation.Id);
      parameterID.Direction = ParameterDirection.Output;
      cmd.Parameters.Add(parameterID); 

      cmd.Parameters.Add(new SqlParameter("@PhoneNo", oReservation.ClientPhone));
      cmd.Parameters.Add(new SqlParameter("@UserId", oReservation.UserID));
      cmd.Parameters.Add(new SqlParameter("@Description", oReservation.Description));
      cmd.Parameters.Add(new SqlParameter("@TestId", oReservation.TestId));
      cmd.Parameters.Add(new SqlParameter("@StartDate", oReservation.StartDate));

      cmd.ExecuteNonQuery();

      returnValue = Convert.ToInt32(cmd.Parameters["@ID"].Value);

      return returnValue;
}
19
Azhar

ストアドプロシージャを呼び出しているようですが、definedSqlCommandをストアドプロシージャにしたことがありません。

using (SqlCommand cmd = new SqlCommand("dbo.usp_ClientHistoryItem", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;  // add this line to tell ADO.NET it's a stored procedure!!

その行を忘れた場合、ADO.NETはその内容をアドホックSQLステートメントとして解釈しようとします。

40
marc_s

これは私の問題を解決します

cmd.CommandType = CommandType.StoredProcedure;

2
siva

ストアード・プロシージャーのIDパラメーターは、OUTPUTパラメーターとして設定する必要があります。ストアドプロシージャではなくコードで設定するだけです。

2
Mujtaba Hassan

やあみんな。

その場合は、コマンドのプロパティCommandTypeをストアドプロシージャに設定する必要があります。そうしないと、パラメーターが検出されません。

1
Jorge Corradi

このエラーがスローされるもう1つの理由は、値を渡す必要のあるパラメーターをコードが見つけられなかったために、ストアドプロシージャとコードで変数名が一致しない場合です。それらが一致することを確認してください:

ストアドプロシージャ:

create procedure getEmployee
    @ID 
as
Begin
    select * 
    from emp 
    where id = @ID
End

コード:

SqlParameter p = new SqlParameter("@ID", id);
cmd.Parameter.Add(p);

パラメータ@IDコードとストアドプロシージャの両方で一致する必要があります

0
Altamash Shaikh