gpt4 book ai didi

c# - T-SQL : returning the new INSERT identity to C#

转载 作者:太空狗 更新时间:2023-10-30 00:00:27 24 4
gpt4 key购买 nike

我正在使用存储过程将值放入 SQL Server。该过程将向添加的行添加一个 ID。我需要将此 ID 取回我的代码。

目前我可以在 Visual Studio 的输出窗口中看到输出 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

这也适用于多行。

关于c# - T-SQL : returning the new INSERT identity to C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5212226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com