Yak*_*kov 0 c# sql sql-server stored-procedures sql-server-2012
我有一个带参数@id int OUTPUT
的存储过程(sql server 2012)该过程向数据库表中插入一些数据并返回受影响行的ID
SET @id=SCOPE_IDENTITY()
RETURN @id
Run Code Online (Sandbox Code Playgroud)
我从SQL Server测试它,它工作正常.但是当我从C#调用它时:它确实将数据插入到表中,但返回null:
SqlParameter parm = new SqlParameter("@id", SqlDbType.Int);
parm.Size = 32;
parm.Direction = ParameterDirection.Output; // This is important!
cmd.Parameters.Add(parm);
object id = (int?)cmd.ExecuteScalar();//<-null
Run Code Online (Sandbox Code Playgroud)
请指出导致这种奇怪行为的原因是什么?
ID的值存储在Output参数中,该参数可在执行查询后读取.
SqlParameter parm = new SqlParameter("@id", SqlDbType.Int);
parm.Size = 32;
parm.Direction = ParameterDirection.Output; // This is important!
cmd.Parameters.Add(parm);
cmd.ExecuteNonQuery();
object id = (int)cmd.Parameters["@id"].Value;
Run Code Online (Sandbox Code Playgroud)
或者您可以将查询本身更改为最后一行
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
并从ExecuteScalar中获取值(在这种情况下无需传递ID参数)
object result = cmd.ExecuteScalar();
if(result != null)
id = Convert.ToInt32(result);
Run Code Online (Sandbox Code Playgroud)