ожидает параметр '@ID', который не был предоставлен? - PullRequest
17 голосов
/ 21 марта 2012

Я отправляю 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;
}

Ответы [ 5 ]

39 голосов
/ 21 марта 2012

Вы, кажется, вызываете хранимую процедуру - но вы никогда не определяли ваш SqlCommand как хранимую процедуру:

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 ....

2 голосов
/ 01 февраля 2014

это решит мою проблему может быть, это может быть полезно

cmd.CommandType = CommandType.StoredProcedure;

2 голосов
/ 21 марта 2012

Ваш параметр ID в хранимой процедуре должен быть установлен как параметр OUTPUT. Вы просто устанавливаете его в коде, а не в хранимой процедуре.

1 голос
/ 11 декабря 2013

Привет, ребята.

Вы должны установить свойство CommandType для команды в StoredProcedure, если это так. В противном случае он не обнаружит параметры.

0 голосов
/ 16 июля 2016

Еще одна причина, по которой выдается эта ошибка, заключается в том, что имена переменных не совпадают в вашей хранимой процедуре и коде, поскольку код не может найти параметр, которому необходимо передать значение.Убедитесь, что они совпадают:

Хранимая процедура:

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

Код:

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

Параметр @ID должен совпадать как в коде, так и в хранимой процедуре

...