试图获取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对于我的第一个表?——蒂姆。
从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参数并设置方向为"输出"。请查看此链接:
获取最近添加的记录的标识