J'essaie de lire la valeur des paramètres OUT renvoyée par la procédure stockée, mais elle renvoie l'erreur DBNULL . Même la procédure renvoie la valeur.
Code:
int? outParam= 0;
SqlParameter sqlParam= new SqlParameter("@model", user.Name+" Model");
SqlParameter sqlParamOut = new SqlParameter("out", outParam);
sqlParamOut.DbType = System.Data.DbType.Int32;
sqlParamOut.Direction = System.Data.ParameterDirection.Output;
UsersPhonesDBContext.Database.ExecuteSqlCommand("dbo.InsertPhones @model, @out", sqlParam, sqlParamOut);
outParam = Convert.ToInt32(sqlParamOut.Value);
SP:
alter PROCEDURE InsertPhones (
@model varchar(100),
@out int output
)
AS
BEGIN
Insert into Phones (Model, Manufacturer)
Values
(
@model,
'Hunain Phone'
)
set @out= SCOPE_IDENTITY();
Select @out
END
GO
out
paramètres de out
dans SQL Server sont amusants. Vous devez vous répéter partout .
Plus précisément, ici, vous avez oublié de le mentionner dans la liste des paramètres lorsque vous appelez le proc stocké. dbo.InsertPhones @model, @out
doit être dbo.InsertPhones @model, @out out
. Il existe peut-être également un moyen d’omettre la liste de paramètres de cette chaîne et d’indiquer à SQL Server que vous lui attribuez un nom de procédure stockée, et non un texte de requête arbitraire. Objet SqlCommand
, ce serait via la propriété CommandType
).
Si vous utilisez un paramètre out
, la select
à la fin de la procédure stockée est inutile, mais je suppose que c'était une tentative de résolution.