2012-03-21 20 views
16

Io mando ID come outparameter ma il suo errore dandosi aspetta il parametro '@ID', che non è stato fornito?

System.Data.SqlClient.SqlException: La procedura o la funzione 'usp_ClientHistoryItem' si aspetta parametro '@ID', che non è stata fornita .

Codice

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

ha si imposta il parametro ID come fuori quando si crea la stored procedure? (SUL DATABASE, NON SUL CODICE) – jclozano

risposta

32

Sembra che tu stia chiamando una stored procedure - ancora non l'avete mai definito tua SqlCommand essere una stored procedure:

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

Se si dimentica che linea, quindi ADO.NET proverà a interpretare le tue cose come una dichiarazione SQL ad hoc ....

2

Il parametro ID nella stored procedure deve essere impostato come parametro OUTPUT. Stai semplicemente impostandolo nel codice non nella stored procedure.

+0

L'ho fatto in StoredProcedure :) – Azhar

1

Hy guys.

È necessario impostare la proprietà CommandType per il comando su StoredProcedure, se questo è il caso. Altrimenti non rileverà i parametri.

2

questo risolvere il mio problema può essere utile essa può

cmd.CommandType = CommandType.StoredProcedure;

0

Un altro motivo questo errore viene generato è quando i nomi delle variabili non corrispondono in stored procedure e il codice perché il codice non riesce per trovare il parametro a cui deve essere passato il valore. Assicurarsi che essi corrispondono:

stored procedure:

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

Codice:

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

Il parametro @ID deve corrispondere sia in codice e stored procedure

Problemi correlati