Sto cercando di leggere il valore dei parametri OUT restituito dalla stored procedure, ma genera l'errore DBNULL . Anche la procedura restituisce il valore.
Codice:
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
parametri in SQL Server sono divertenti. Devi ripeterti ovunque .
In particolare, qui, hai dimenticato di menzionarlo nell'elenco dei parametri quando chiami il proc memorizzato. dbo.InsertPhones @model, @out
dovrebbe essere dbo.InsertPhones @model, @out out
. Potrebbe anche esserci un modo per omettere l'elenco dei parametri da questa stringa e indicare a SQL Server che si sta assegnando un nome di stored procedure, non un testo di query arbitrario, ma non sono sicuro di come lo si farebbe specificamente qui (con un Oggetto SqlCommand
, sarebbe tramite la proprietà CommandType
).
Se stai utilizzando un parametro out
, la select
alla fine della stored procedure non è necessaria, ma presumo che sia stato un tentativo di correzione.