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

本文关键字:作为 变量 IDENTITY 获取 SELECT SCOPE | 更新日期: 2023-09-27 18:03:45

我插入一行到一个表,然后想要得到新的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对于我的第一个表?——蒂姆。

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

从SCOPE_IDENTITY()的文档中,强调我的:

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

因为你正在使用两个查询,它们被认为是两个批次。您需要在单个查询中执行insert和select。

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

这样的东西
 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);

从SQL Server获取SCOPE_IDENTITY()值是很容易的。我将给出一个示例,我能够在c#标签中打印SCOPE_IDENTITY()数据。

  • 我的代码片段在提交从数据插入
btnSubmit_Click()
{
    Random s = new Random();
    cmd = new SqlCommand("INSERT INTO [dbo].[tblMemberAccount] ([Userid], [User_pwd], [User_mobile], [User_referal], [UserWallet]) VALUES(@Userid, @User_pwd, @User_mobile, @User_referal, @UserWallet) ​select scope_identity()", cons); 
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@Userid",s.Next(4506,9999));
    cmd.Parameters.AddWithValue("@User_pwd",txtPassword.Text);
    cmd.Parameters.AddWithValue("@User_mobile",txtPhoneNumber.Text);
    cmd.Parameters.AddWithValue("@User_referal",txtReferral.Text);
    cmd.Parameters.AddWithValue("@UserWallet",10);
    cons.Open();
    int g = Convert.ToInt32(cmd.ExecuteScalar());
    cons.Close();
    lblConfirm.Text = "Member " +g+ " added successfully!";
}

这里的值'g'返回的是scope_identity的值

如果数据库是SQL SERVER,创建SQL参数并设置方向为"输出"。请查看此链接:

获取最近添加的记录的标识