簡體   English   中英

Ado.Net交易鎖

[英]Ado.Net transaction lock

我正在從事e-commerce應用程序,數據庫中有三個表

  1. 顧客
  2. 訂購
  3. 訂單詳細信息

關於單個產品的Order Details信息和OrderId這是Order主鍵),並且我有2個Stored Procedures

  1. InsertIntoOrderAndCustomer
  2. InsertIntoOrderDetails

由於從ADO.Net調用了InsertIntoOrderAndCustomer ,它將在Order生成自動autoid OrderId ,我需要將該ID用作InsertIntoOrderDetails的參數,但是我擔心如果放置多個訂單,則參數值可能是錯誤的。 我可以鎖定C#代碼,以便一次只下一個訂單嗎? 如果是,那怎么辦?

我很擔心

2人下訂單

執行可能是

人甲下單

  1. 將數據插入到人員A的“訂單”表中-它會自動生成ID IDENTITY (當然只有一次)。

意思是當乙人下訂單時

  1. 將數據插入到人員B的訂單表中-它會自動生成ID IDENTITY (不同的ID)。

然后將數據插入“訂單”表中具有“自動編號” IDENTITY product details表中。

在插入product details我正在使用SQL Server MAX來獲得自動ID,這將使我獲得101,如上述情況所示。

有沒有可能性,即第二插件把IDENTITYOrder人B(即101)和人的其他數據的A 這讓我擔心。

我認為發生混淆的可能性來自“我正在使用SQL Server MAX來獲取自動ID”。 如果要從C#代碼中調用兩個存儲過程並分別調用它們,並且第二個InsertIntoOrderDetailsInsertIntoOrderDetails )依賴MAXOrders獲取最后一個自動生成的ID,那么可以,這取決於從用戶A獲取ID的情況。或B在OrderDetails表中混在一起。

我可以提出三種方法。 可能還有其他:

  1. 從Orders中自動生成的id作為InsertIntoOrderAndCustomer的Return或Output參數返回。 使用scope_identity()調用第二個InsertIntoOrderDetails時,將其用作輸入參數。 C#代碼應了解上下文中包含哪些客戶和訂單詳細信息。

  2. InsertIntoOrderAndCustomer捕獲自動生成的ID(使用scope_identity ,然后直接直接調用InsertIntoOrderDetails

  3. 我不建議這樣做,但自您提出要求以來。 您的c#代碼可以使用EventWaitHandle來允許一次僅一次調用過程代碼。 這是不可擴展的,並且如果在c#世界之外調用過程,也不會禁止使用現有方法進行混合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM