Estoy intentando leer el valor de los parámetros de SALIDA devuelto por el procedimiento almacenado pero arroja el error DBNULL . Incluso el procedimiento está devolviendo el valor.
Código:
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
parámetros en SQL Server son divertidos. Tienes que repetirte en todas partes .
Específicamente, aquí, ha olvidado mencionarlo en la lista de parámetros al llamar al proceso almacenado. dbo.InsertPhones @model, @out
debería ser dbo.InsertPhones @model, @out out
. También puede haber una manera de omitir la lista de parámetros de esta cadena e indicarle a SQL Server que le está dando un nombre de procedimiento almacenado, no un texto de consulta arbitrario, pero no estoy seguro de cómo lo haría específicamente aquí (con un Objeto SqlCommand
, sería a través de la propiedad CommandType
).
Si está utilizando un parámetro de out
, la select
al final del procedimiento almacenado no es necesaria, pero supongo que fue un intento de solución.