Ожидает параметр '@ID', который не был указан?
Я отправляю идентификатор в качестве внешнего, но его сообщение об ошибке
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;
}
Ответы
Ответ 1
Кажется, вы вызываете хранимую процедуру, но вы никогда не определяете свой SqlCommand
как хранимую процедуру:
using (SqlCommand cmd = new SqlCommand("dbo.usp_ClientHistoryItem", conn))
{
cmd.CommandType = CommandType.StoredProcedure; // add this line to tell ADO.NET it a stored procedure!!
Если вы забудете эту строку, ADO.NET попытается интерпретировать ваш материал как специальный SQL-запрос....
Ответ 2
Параметр ID в хранимой процедуре должен быть установлен как параметр OUTPUT. Вы просто устанавливаете его в коде не в хранимой процедуре.
Ответ 3
эта проблема решает мою проблему
может быть, это может быть полезно
cmd.CommandType = CommandType.StoredProcedure;
Ответ 4
Ги парни.
Вы должны установить свойство CommandType для Command для StoredProcedure, если это произойдет. В противном случае он не обнаружит параметры.
Ответ 5
Другая причина, по которой возникает эта ошибка, - это когда имена переменных не совпадают в вашей хранимой процедуре и коде, потому что код не может найти параметр, которому должно передаваться значение. Убедитесь, что они соответствуют:
Сохраненная процедура:
create procedure getEmployee
@ID
as
Begin
select *
from emp
where id = @ID
End
код:
SqlParameter p = new SqlParameter("@ID", id);
cmd.Parameter.Add(p);
Параметр @ID
должен совпадать как в коде, так и в хранимой процедуре