her*_*ube 2 sql-server ado.net
我有一个带有标识列的表,我想在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();
Run Code Online (Sandbox Code Playgroud)
如果我更改上面代码的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();
Run Code Online (Sandbox Code Playgroud)
我试图更改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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |