我有一个带有标识列的表,我想在 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 版)运行代码,再次得到相同的结果。
有什么想法我在这里做错了吗?