我有一个带有标识列的表,我想在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)运行代码,同样的结果也是如此。
我在这里做错了什么想法?
答案 0 :(得分:6)
尝试将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();