gpt4 book ai didi

sql-server - SCOPE_IDENTITY 似乎不适用于参数化查询

转载 作者:行者123 更新时间:2023-12-03 16:26:08 25 4
gpt4 key购买 nike

我有一个带有标识列的表,我想在 INSERT 之后获取其值。以下代码不使用参数,但运行良好:

string query = "INSERT INTO aTable ([aColumn]) VALUES (42)";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();

query = "SELECT CAST(SCOPE_IDENTITY() AS bigint)";
command = new SqlCommand(query, connection);
object identity = command.ExecuteScalar();

如果我将上述代码的 INSERT 部分更改为使用参数化查询,ExecuteScalar() 会突然返回一个 System.DBNull 值。这是参数化查询代码的样子:

string query = "INSERT INTO aTable ([aColumn]) VALUES (@aColumn)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@aColumn", 42);
command.ExecuteNonQuery();

我已尝试更改 SCOPE_IDENTITY 代码,以便它使用输出参数并调用 ExecuteNonQuery(),但我仍然在 out 参数中得到一个空值。我还尝试针对两个不同版本的 SQL Server(2012 和 2008,均为 Express Edition)运行代码,同样得到相同的结果。

知道我在这里做错了什么吗?

最佳答案

尝试将您的 INSERT 和 SELECT 组合成一条语句

string query = "INSERT INTO aTable ([aColumn]) VALUES (@aColumn);SELECT CAST(SCOPE_IDENTITY() AS bigint)"; 
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@aColumn", 42);
object identity = command.ExecuteScalar();

关于sql-server - SCOPE_IDENTITY 似乎不适用于参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622525/

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