试图将SELECT SCOPE_IDENTITY()作为c#变量

时间:2016-08-23 22:46:43

标签: c# asp.net sql-server asp.net-webpages

我在一个表中插入一行然后想要获取该新ID,以便我可以将其添加到另一个存储电子邮件地址的变量中。

 var db = Database.Open("myDB");
 var insertCommand1 = "INSERT INTO myDB (FirstName, LastName) Values(@0, @1)";                       
 db.Execute(insertCommand1, first, last);
 var lastInsertedId = db.QueryValue("SELECT SCOPE_IDENTITY()");

 var insertCommand2 = "INSERT INTO email (id_person, email) Values(@0, @1)";
 db.Execute(insertCommand2, lastInsertId, email);

其中id_person是在我的第一个表中创建的id。当我运行代码时,我得到lastInsertedId = {}。是什么原因导致它没有为我的第一个表抓取id_person的值,这是一个主键,int,而不是null? --Tim

3 个答案:

答案 0 :(得分:1)

来自the documentation of SCOPE_IDENTITY(),强调我的:

  

返回插入同一范围内的标识列的最后一个标识值。范围是一个模块:存储过程,触发器,函数或批处理。 因此,如果两个语句属于同一存储过程,函数或批处理,则它们在同一范围内。

因为您使用两个查询,所以它们被视为两个批次。您需要在单个查询中执行插入和选择。

我不知道你使用的是什么库,所以我只是猜测语法,但我相信你需要像

这样的东西
 var db = Database.Open("myDB");
 var insertCommand1 = "INSERT INTO myDB (FirstName, LastName) Values(@0, @1); " +
                      "SELECT SCOPE_IDENTITY()";
 var lastInsertedId = db.QueryValue(insertCommand1, first, last);

 var insertCommand2 = "INSERT INTO email (id_person, email) Values(@0, @1)";
 db.Execute(insertCommand2, lastInsertId, email);

答案 1 :(得分:0)

如果数据库在SQL SERVER中,请创建SQL参数并将方向设置为 “输出”。 请检查此链接:

Getting the identity of the most recently added record

答案 2 :(得分:0)

从 SQL Server 获取 SCOPE_IDENTITY() 值非常容易。我将举一个例子,其中我能够在 c# 标签中打印 SCOPE_IDENTITY() 数据。

  • 从数据插入提交的我的代码片段
new Promise

这里的值 'g' 返回了 scope_identity 值。