我使用存储过程将值放入 SQL Server。该过程将向所添加的行添加一个 ID。我需要将此 ID 返回到我的代码中。
目前我可以在 Visual Studio 的 OUTPUT 窗口中看到输出 id,但似乎无法在我的代码中捕获它。这是该过程的摘要版本:
SQL:
CREATE PROCEDURE dbo.DoSomething
(
@var1 INT = NULL,
@var2 INT = NULL,
@var3 DATE = NULL
)
AS
BEGIN
INSERT INTO atable
(
vara,
varb,
varc
)
VALUES
(
@var1,
@var2,
@var3
)
RETURN SCOPE_IDENTITY()
END
C#:
int result = 0;
/// create command
SqlCommand cmd = new SqlCommand("DoSomething", this.OpenSqlConnection());
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@var1", thing.value1);
cmd.Parameters.AddWithValue("@var2", thing.value2);
cmd.Parameters.AddWithValue("@var3", thing.value3);
/// send data to db
result = (int)cmd.ExecuteScalar();
所以我收到一个错误:你调用的对象是空的。当它到达 (int)cmd.ExecuteScalar() 时。
有任何想法吗?
...
SELECT SCOPE_IDENTITY()
RETURN 值实际上作为特殊的 OUTPUT 参数返回。 SELECT 给出 ExecuteScalar 的结果集。
您可以使用OUTPUT子句也代替单独的 SELECT:
...
AS
BEGIN
INSERT INTO atable
(
vara,
varb,
varc
)
OUTPUT INSERTED.IDCol
VALUES
(
@var1,
@var2,
@var3
)
END
GO
这也适用于多行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)