[英]Ado.Net transaction lock
我正在從事e-commerce
應用程序,數據庫中有三個表
關於單個產品的Order Details
信息和OrderId
這是Order
主鍵),並且我有2個Stored Procedures
由於從ADO.Net
調用了InsertIntoOrderAndCustomer
,它將在Order
生成自動autoid
OrderId
,我需要將該ID用作InsertIntoOrderDetails
的參數,但是我擔心如果放置多個訂單,則參數值可能是錯誤的。 我可以鎖定C#
代碼,以便一次只下一個訂單嗎? 如果是,那怎么辦?
我很擔心
2人下訂單
執行可能是
人甲下單
IDENTITY
(當然只有一次)。 意思是當乙人下訂單時
IDENTITY
(不同的ID)。 然后將數據插入“訂單”表中具有“自動編號” IDENTITY
product details
表中。
在插入product details
我正在使用SQL Server
MAX
來獲得自動ID,這將使我獲得101,如上述情況所示。
有沒有可能性,即第二插件把IDENTITY
的Order
人B(即101)和人的其他數據的A
? 這讓我擔心。
我認為發生混淆的可能性來自“我正在使用SQL Server MAX
來獲取自動ID”。 如果要從C#代碼中調用兩個存儲過程並分別調用它們,並且第二個InsertIntoOrderDetails
( InsertIntoOrderDetails
)依賴MAX
從Orders
獲取最后一個自動生成的ID,那么可以,這取決於從用戶A獲取ID的情況。或B在OrderDetails表中混在一起。
我可以提出三種方法。 可能還有其他:
從Orders中自動生成的id作為InsertIntoOrderAndCustomer
的Return或Output參數返回。 使用scope_identity()
調用第二個InsertIntoOrderDetails
時,將其用作輸入參數。 C#代碼應了解上下文中包含哪些客戶和訂單詳細信息。
讓InsertIntoOrderAndCustomer
捕獲自動生成的ID(使用scope_identity
,然后直接直接調用InsertIntoOrderDetails
。
我不建議這樣做,但自您提出要求以來。 您的c#代碼可以使用EventWaitHandle
來允許一次僅一次調用過程代碼。 這是不可擴展的,並且如果在c#世界之外調用過程,也不會禁止使用現有方法進行混合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.