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

SCOPE_IDENTITY does not seem to work with parameterized queries(SCOPE_IDENTITY 似乎不适用于参数化查询)
本文介绍了SCOPE_IDENTITY 似乎不适用于参数化查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有标识列的表,我想在插入后获取该列的值.以下不使用参数的代码运行良好:

I have a table with an identity column whose value I would like to get after an INSERT. The following code, which does not use parameters, is working perfectly:

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 值.这是参数化查询代码的样子:

If I change the INSERT part of the above code to use a parameterized query, ExecuteScalar() suddenly returns a System.DBNull value. This is how the parameterized query code looks like:

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 版)上运行代码,结果相同.

I have tried to change the SCOPE_IDENTITY code so that it uses an output parameter and invokes ExecuteNonQuery(), but I still get a null value in the out parameter. I have also tried running the code against two different versions of SQL Server (2012 and 2008, both Express Edition), again with the same result.

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

Any ideas what I am doing wrong here?

推荐答案

尝试将 INSERT 和 SELECT 合并为一个语句

Try combining your INSERT and SELECT into one statement

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(); 

这篇关于SCOPE_IDENTITY 似乎不适用于参数化查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)