C# 在使用作用域标识时遇到一些问题
我有两个表,一个包含名称,另一个包含费率和其他数据,每个名称对应一行。在我向表a中插入一个新名称之后,我想获得新的自动生成的PK,现在使用它插入到我的另一个表B中 我该怎么做?我在网上读到了C# 在使用作用域标识时遇到一些问题,c#,sql,sql-server,scope-identity,C#,Sql,Sql Server,Scope Identity,我有两个表,一个包含名称,另一个包含费率和其他数据,每个名称对应一行。在我向表a中插入一个新名称之后,我想获得新的自动生成的PK,现在使用它插入到我的另一个表B中 我该怎么做?我在网上读到了scope\u identity,但我不知道如何使用它 这就是我到目前为止所做的: SqlConnection con = new SqlConnection(pubvar.x); SqlCommand command = con.CreateCommand(); command.CommandText =
scope\u identity
,但我不知道如何使用它
这就是我到目前为止所做的:
SqlConnection con = new SqlConnection(pubvar.x);
SqlCommand command = con.CreateCommand();
command.CommandText ="Insert into A values('" +Name + "')";
SqlCommand command2 = con.CreateCommand();
command2.CommandText = "Insert into B values(....)";
SELECT SCOPE_IDENTITY();
con.Open();
command.ExecuteNonQuery();
con.Close();
考虑到您描述的情况,我认为不需要从数据库返回标识。您只需在一个命令中发出这两条语句:
using (var cnx = new SqlConnection(pubvar.x))
using (var cmd = new SqlCommand
{
Connection = cnx,
CommandText = @"
insert into A (Name) values (@name)
insert into B (A_ID, Rate) values (scope_identity(), @rate)
",
Parameters =
{
new SqlParameter("@name", name),
new SqlParameter("@rate", .5m) //sample rate
}
})
{
cnx.Open();
cmd.ExecuteNonQuery();
}
不确定我是否正确理解了你的问题。但您的代码似乎是c#和SQL的组合。SCOPE\u Identity为您提供最近在当前作用域中生成的标识值。如果您可以将这些语句包含在过程中,它将起作用。“将这些语句包含在过程中”是什么意思?创建一个过程并按顺序执行上述步骤。。例如:1.插入表A;2.将scope_identity()赋值给变量;3.通过更好地利用变量插入表B;储存的procedure@Limey他知道存储过程是什么。