2012-03-21 6 views
16

Я посылаю удостоверение личности как outparameter но дает ошибкуожидает параметр '@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; 
} 
+0

вы установите параметр ID, как из при создании хранимой процедуры? (НА БАЗЕ ДАННЫХ, НЕ КОД) – jclozano

ответ

32

Вы, кажется, вызов хранимой процедуры - но вы никогда не определены ваш 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!! 

Если вы забыли, что line, то ADO.NET попытается интерпретировать ваши данные как специальный SQL-запрос ....

2

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

+0

Я сделал это в StoredProcedure :) – Azhar

1

Hy парней.

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

2

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

cmd.CommandType = CommandType.StoredProcedure;

0

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

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

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

Код:

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

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

Смежные вопросы