2012-03-21 13 views
16

przesyłam identyfikator jako outparameter ale jego dając erroroczekuje parametru "@ID", który nie został dostarczony?

System.Data.SqlClient.SqlException: procedura lub funkcja 'usp_ClientHistoryItem' oczekuje parametr '@ID', który nie został dostarczony .

Kod

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

czy parametr ID ustawiony jako out podczas tworzenia procedury przechowywanej? (W BAZIE DANYM, A NIE KOD) – jclozano

Odpowiedz

32

Wydaje się, że wywołanie procedury przechowywanej - jeszcze nigdy zdefiniowaniu Twój SqlCommand być procedura przechowywana:

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

Jeśli zapomnisz, że linii, ADO.NET spróbuje zinterpretować twoje rzeczy jako ad-hoc instrukcja SQL ....

2

Twój parametr ID w procedurze przechowywanej musi być ustawiony jako parametr WYJŚCIE. Po prostu ustawiasz go w kodzie, a nie w procedurze przechowywanej.

+0

Zrobiłem to w StoredProcedure :) – Azhar

1

Hy faceci.

Musisz ustawić właściwość CommandType dla Command to StoredProcedure, jeśli tak jest. W przeciwnym razie nie wykryje parametrów.

2

ten rozwiązać mój problem może być to pomocne może

cmd.CommandType = CommandType.StoredProcedure;

0

Innym powodem tego błędu jest generowany jest, gdy nazwy zmiennych nie pasują w procedurze przechowywanej i kodu, ponieważ kod nie powiedzie aby znaleźć parametr, do którego należy przekazać wartość. Upewnij się, że odpowiadają one:

procedury zapisanej w pamięci:

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

Kod:

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

Parametr @ID musi pasować zarówno w kodzie i procedura przechowywana