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;
}
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 ....
celui-ci résoudre mon problème peut-être qu'il peut être utile
cmd.CommandType = CommandType.StoredProcedure;
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.
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.
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