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;
}
ストアドプロシージャを呼び出しているようですが、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ステートメントとして解釈しようとします。
これは私の問題を解決します
cmd.CommandType = CommandType.StoredProcedure;
ストアード・プロシージャーのIDパラメーターは、OUTPUTパラメーターとして設定する必要があります。ストアドプロシージャではなくコードで設定するだけです。
やあみんな。
その場合は、コマンドのプロパティCommandTypeをストアドプロシージャに設定する必要があります。そうしないと、パラメーターが検出されません。
このエラーがスローされるもう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
コードとストアドプロシージャの両方で一致する必要があります