Ich versuche, den von der gespeicherten Prozedur zurückgegebenen OUT-Parameterwert zu lesen, es wird jedoch der Fehler DBNULL ausgegeben . Sogar die Prozedur gibt den Wert zurück.
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
Parameter in SQL Server machen Spaß. Du musst dich überall wiederholen.
Insbesondere haben Sie hier vergessen, sie in der Parameterliste zu erwähnen, wenn Sie die gespeicherte Prozedur aufrufen. dbo.InsertPhones @model, @out
sollte dbo.InsertPhones @model, @out out
. Es gibt möglicherweise auch eine Möglichkeit, die Parameterliste aus dieser Zeichenfolge wegzulassen und SQL Server mitzuteilen, dass Sie einen gespeicherten Prozedurnamen angeben, nicht einen beliebigen Abfrage-Text SqlCommand
Objekt, wäre es über die seine CommandType
Eigenschaft).
Wenn Sie einen out
Parameter verwenden, ist das select
am Ende der gespeicherten Prozedur nicht erforderlich, aber ich gehe davon aus, dass dies ein Fixversuch war.