繁体   English   中英

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

[英]Trying to get SELECT SCOPE_IDENTITY() as c# variable

我在一个表中插入一行,然后想要获取那个新 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 = {}。 有什么理由不为我的第一个表获取主键 int 的 id_person 值,而不是 null ? --蒂姆

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

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

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

从 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 值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM