2012-01-23 67 views
1

我已經做了一些搜索,但還沒有找到確切的答案,我覺得必須是常見的情況,並且應該有一個「最佳實踐」模式解決方案:在SQL Server 2008中只允許一個客戶更新

我有一個用.NET 4(C#)和SQL SERVER 2008後端編寫的應用程序。我擁有完全的控制權,並且不需要擔心外部流程或應用程序。

從本質上講,我要做到以下幾點:

允許任何人看到客戶和他們的訂單(從主搜索表單返回)。

只要用戶添加新訂單或選擇訂單查看或編輯,就會在整個客戶上鎖定一個鎖。其他用戶將能夠「只讀」客戶和任何訂單。

當用戶退出訂單時,鎖定被移除(通過退出屏幕或退出應用程序)。而且,這可能是最困難的部分,如果用戶崩潰(可能鎖只有有限的時間來確保這一點),鎖就會被移除。

我看到了應用程序鎖和事務,但我不知道要使用哪個,它們每個都似乎有問題。

那麼鎖定客戶的最佳做法是什麼,以及其他用戶知道客戶被其他用戶鎖定的方式是什麼?

回答

1

手動執行此操作的方法是在表中添加兩列:布爾LOCKED和DateTime LAST_LOCKED,並在用戶鎖定和釋放解鎖時更新(定期更新LAST_LOCKED),在您的應用程序中放置到期限制,如10分鐘,如果註冊表被鎖定超過10分鐘,請解鎖。

+0

這就是電影/劇院/航空公司網站如何使用基於時間的「鎖定」或「預訂」 – Kane

+0

我正在尋找「鎖定記錄」,「解鎖記錄」和「記錄鎖定?內置於SQL Server的命令。但我懷疑沒有這樣的事情。接下來最好的是手動方法,並通過在獲得鎖的用戶上設置一個定時器來改進它,他必須每30秒更新一次最後一次鎖定時間。然後,應用程序過期超過1分鐘的任何鎖定將是完全安全的。 –

0

您正確的應用程序鎖將難以管理,並且事務鎖必須儘可能短。 有關「鎖定」和「Last_Locked」列的想法很好。還會爲鎖定記錄的日期時間添加過濾索引,以便在必要時加速解鎖並找到鎖定的客戶。

相關問題