![](/img/trans.png)
[英]How to get to get the value of @@identity or SELECT SCOPE_IDENTITY() from stored procedure in C# code?
[英]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.