web-dev-qa-db-fra.com

attend le paramètre '@ID', qui n'a pas été fourni?

J'envoie une pièce d'identité en tant qu'outparameter mais sa donne une erreur

System.Data.SqlClient.SqlException: La procédure ou la fonction 'usp_ClientHistoryItem' attend le paramètre '@ID', qui n'a pas été fourni.

Code

 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;
}
17
Azhar

Vous semblez appeler une procédure stockée - et pourtant vous n'avez jamais défini votre SqlCommand comme procédure stockée:

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

Si vous oubliez cette ligne, ADO.NET essaiera d’interpréter vos données comme une instruction SQL ad-hoc ....

37
marc_s

celui-ci résoudre mon problème peut-être qu'il peut être utile

cmd.CommandType = CommandType.StoredProcedure;

2
siva

Votre paramètre ID dans la procédure stockée doit être défini comme paramètre OUTPUT. Vous ne faites que l'insérer dans un code, pas dans une procédure stockée.

2
Mujtaba Hassan

Hy les gars.

Vous devez définir la propriété CommandType de la commande sur Procédure stockée si c'est le cas. Sinon, les paramètres ne seront pas détectés.

1
Jorge Corradi

Une autre raison de cette erreur est due au fait que les noms de variable ne correspondent pas dans votre procédure stockée et votre code, car le code ne parvient pas à trouver le paramètre auquel la valeur doit être transmise. Assurez-vous qu'ils correspondent:

Procédure stockée:

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

Code:

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

Le paramètre @ID doit correspondre à la fois au code et à la procédure stockée

0
Altamash Shaikh