Pro*_*994 0 c# sql database sql-server visual-studio
我在SQL Server Manager 2014中有以下数据库方案.

我正在Visual Studio中创建一个C#-windows应用程序,我想插入一个新的订单行和一个新的订单.问题是两个表的主键,在服务器管理器中自动生成,所以我还没有订单表的主键的值,但是我需要该值来填充orderLine的外键柱.如何插入这两行.
亲切的问候
小智 5
SCOPE_IDENTITY返回插入同一范围内的标识列的最后一个标识值.范围是一个模块:存储过程,触发器,函数或批处理.因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内.
您可以使用SqlCommand.ExecuteScalar执行insert命令并在一个查询中检索新ID.
using (var con = new SqlConnection(ConnectionString)) {
int newOrderID;
var cmd = "INSERT INTO Order (column_name) VALUES (@Value) ;SELECT CAST(scope_identity() AS int)";
using (var insertCommand = new SqlCommand(cmd, con)) {
insertCommand.Parameters.AddWithValue("@Value", "bar");
con.Open();
newOrderID = (int)insertCommand.ExecuteScalar();
}
}
Run Code Online (Sandbox Code Playgroud)
这将允许您捕获最后生成的OrderId,并在OrderLine表的Insert语句中使用它.
另一种选择是使用以下SQL代码:
string command = "INSERT INTO Order(totalPrice) OUTPUT INSERTED.ID VALUES(@totalPrice)" // this will be a parameter from your code
Run Code Online (Sandbox Code Playgroud)
然后OrderId可以从:
Int32 orderId = (Int32) command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)