C# 如何获取OrderID以在SQL中向订单添加新行?

C# 如何获取OrderID以在SQL中向订单添加新行?,c#,sql,sql-server,database,C#,Sql,Sql Server,Database,所以我肯定答案是在线的,但我真的找不到。当我搜索诸如“sql将行添加到现有订单”等内容时,谷歌搜索会给我带来各种不相关的主题 我使用C#和ASP.NET以及SQL Server来存储客户购买物品时的订单,以形成订单历史记录。我正在执行所有必要的步骤,并用两个表组织我的数据库 订单将具有OrderID(主键)、UserID(外键)等。然后是订单行 订单行将具有LineID(主键)、OrderID(外键)、ProductID(外键)等 我的问题是,如何将整个订单插入SQL 现在我有了一个方法,它将创

所以我肯定答案是在线的,但我真的找不到。当我搜索诸如“sql将行添加到现有订单”等内容时,谷歌搜索会给我带来各种不相关的主题

我使用C#和ASP.NET以及SQL Server来存储客户购买物品时的订单,以形成订单历史记录。我正在执行所有必要的步骤,并用两个表组织我的数据库

订单将具有OrderID(主键)、UserID(外键)等。然后是订单行

订单行将具有LineID(主键)、OrderID(外键)、ProductID(外键)等

我的问题是,如何将整个订单插入SQL

现在我有了一个方法,它将创建一个SQL查询以插入到数据库订单表中,并且没有订单行

因此,在[dbo].[Order]等中插入

然后我想从我的列表中添加订单行。如何获取OrderID以便将其放入数据库?我无法查询数据库中我刚刚输入的内容,因为我没有搜索参数,“抓取最后一个条目”似乎很容易出错

插入到[dbo].[OrderLines]中,但我不知道如何获取OrderID

如果这句话措词不当,很抱歉

编辑:

我的代码

bool AddOrder(order parameters)
    InsertOrder method
    for(int k=0;k<amount of Lines; k++) 
        InsertLine(orderID, line)

InsertOrder
    ExecuteString("INSERT INTO STUFF")

InsertLine
    ExecuteString("INSERT INTO STUFF")
bool AddOrder(订单参数)
插入顺序法
对于(int k=0;k您可以用于MS-SQL或MySQL的
LAST\u INSERT\u ID()
并在SQL查询结果中选择它

 INSERT INTO [dbo].[Order] -- etc etc

 -- ... other lines here

 SELECT SCOPE_IDENTITY() -- or LAST_INSERT_ID()
这将返回您刚才插入的内容的标识。然后,在C#中,您可以使用
SqlCommand
ExecuteScalar
,并将结果强制转换为
int

var orderId = (int)sqlCommand.ExecuteScalar();

解决方案是使用SCOPE_IDENTITY()获取最后插入的记录的标识

using (var connection = new SqlConnection("Your connection string"))
{
    int orderID;    
    using (var command = new SqlCommand("INSERT INTO Orders (Created,OrderTotal) VALUES (GetDate(),@OrderTotal); SELECT CONVERT(int, SCOPE_IDENTITY()) as OrderID;", connection))
    {
        command.Parameters.AddWithValue("@OrderTotal", 10.0f);
        connection.Open();
        orderID = (int)command.ExecuteScalar();
    }
    //... now you can use orderID in your next query to insert an OrderLine
}

这就是我想要得到的。问题是我的代码的层次结构。我有三种不同的方法。我将在顶部编辑我的问题。对,这样你的InsertOrder方法应该像我上面所示的那样,并且应该只返回orderID。然后它可以在你的for循环中用作InsertLine的参数。哦,对了,我当时是如此死心塌地地做了想都别想,谢谢。