我們正在使用帶有SQL的WPF/C#創建客戶端服務器應用程序。在這裏,我們生成一個唯一的數字b檢查數據庫(獲取最後一個最大數量),並使用該最大值,我們增加'1'並將數值存儲在數據庫中。此時另一位用戶也在同一屏幕上工作並創建唯一號碼,在某些情況下,唯一號碼會被複制並引發異常。併發問題
我們發現這是一個併發問題。
我們正在使用帶有SQL的WPF/C#創建客戶端服務器應用程序。在這裏,我們生成一個唯一的數字b檢查數據庫(獲取最後一個最大數量),並使用該最大值,我們增加'1'並將數值存儲在數據庫中。此時另一位用戶也在同一屏幕上工作並創建唯一號碼,在某些情況下,唯一號碼會被複制並引發異常。併發問題
我們發現這是一個併發問題。
最後,我們將Singleton模式與鎖一起解決此問題。
謝謝。
這不會以任何方式回答這個問題。請發佈更完整的答案,詳細說明您爲解決問題所採取的步驟,否則此答案和可能的問題對未來的訪問者沒有多大價值。 –
事實上,獲取一個數字,添加一個數字,並希望它仍然沒有被使用是一個線程競爭和多個客戶端之間的競賽 - 應該避免。
選項:
坦率地說,IDENTITY列方法是最簡單的。
您使用的是什麼RDBMS?你還會介意發佈一些代碼來更好地說明你的方法嗎? – BayStallion
客戶端是如何生成一個數字總是?,並且這個數字總是保存在同一張表中的數據庫? – Joseph
一般的想法是這個生成過程應該在服務器上而不是在客戶端上實現。爲了給你一個更詳細的解釋,我需要知道你至少使用了哪個數據庫系統 – BayStallion