如何让OrderID在SQL中向Order添加新行?

时间:2014-06-06 04:28:24

标签: c# sql sql-server database

所以我确定答案是在线的,但我找不到它。当我搜索“sql add lines to existing order”等内容时,谷歌搜索会给我带来各种不相关的主题。

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

订单将包含OrderID(主键),UserID(外键)等。然后是OrderLines

OrderLines将具有LineID(主键),OrderID(外键),ProductID(外键)等。

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

现在我有一个方法可以为INSERT INTO数据库订单表创建一个SQL查询,它没有OrderLines。

so INSERT INTO [dbo]。[Order]等。

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

INSERT INTO [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")

2 个答案:

答案 0 :(得分:2)

解决方案是使用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
}

答案 1 :(得分:0)

您可以将SCOPE_IDENTITY()用于MS-SQL或LAST_INSERT_ID()用于MySQL(不确定您要使用的是哪一个),并在SQL查询的结果中选择它。

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

 -- ... other lines here

 SELECT SCOPE_IDENTITY() -- or LAST_INSERT_ID()

这将返回您刚插入的内容的标识。然后,在C#中,您可以使用ExecuteScalar的{​​{1}}并将结果投射到SqlCommand

int