所以我确定答案是在线的,但我找不到它。当我搜索“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")
答案 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