簡體   English   中英

(my)SQL行鎖定,而用戶輸入數據C#

[英](my)SQL Row Lock while user enters data c#

我將使用數據庫創建一個應用程序,其中允許多個用戶編輯有關實體的信息。

tldr:如何在用戶使用C#編輯信息時鎖定數據庫中的行。

我已經對執行查詢時鎖定數據庫中的記錄進行了一些研究。 我主要看到的是鎖定begin transactioncommit transaction 但是,這不符合我的需求,因為它需要被鎖定的時間比查詢執行的時間更長。

如果user1正在編輯記錄(在c#中,使用表單應用程序,填寫了一些文本框),那么我需要鎖定該行,直到他完成編輯。 因為同時user2可能會嘗試編輯相同的記錄。 到user1完成時,一切都很好,但是當user2完成時,他以太覆蓋或獲取關於他正在搜索的記錄(名稱)的錯誤不再存在。

一個簡單的解決方案是使用IsLocked添加一列,具體取決於用戶可以編輯一行。 但是當由於某種原因應用程序崩潰或用戶強制在任務管理器中停止該進程時,該行將永遠被鎖定。 (或者在發生這種情況時仍然有執行代碼的方法嗎?)

另一種方法是不執行commit transaction就執行查詢。 為此,我相信您必須保持連接打開,否則它將終止。 在運行應用程序時,保持開放連接對我來說似乎不是一個好主意,不是嗎?

旁注:標題說(my)sql,因為我不確定我將使用哪個。

謝謝你的時間!

我認為在用戶以某種GUI形式編輯數據時鎖定行不是最好的解決方案。 應用程序可能崩潰或用戶可以長時間編輯行...這絕對不依賴於您將使用的SQL引擎(MS SQL,MySQL ...)

  • 記錄應具有一些唯一的ID。 因此,像UPDATE table SET ..... WHERE entityID = someID這樣的查詢UPDATE table SET ..... WHERE entityID = someID將不依賴於先前的值(僅注意可能的行刪除)

  • 您可以在編輯之前記住值(或一些時間戳,它是數據庫記錄的一部分),並在更新行之前對其進行檢查,以便您知道有人更改了同一記錄並可以通知用戶。

關於“保持連接打開”-DBConnection實現IDisposable,請閱讀文章如何使用它。 您不必知道再次打開連接-閱讀有關SQL連接池的信息

暫無
暫無

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

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