複数のユーザーがエンティティに関する情報を編集できるデータベースを使用してアプリケーションを作成しようとしています。
tldr: ユーザーが C# で情報を編集しているときに、データベース内の行をロックする方法。
クエリの実行中にデータベース内のレコードをロックすることについて調査しました。私がよく目にするのは、begin transaction
andでロックすることですcommit transaction
。ただし、クエリの実行時間よりも長くロックする必要があるため、これは私のニーズには合いません。
user1 がレコードを編集している場合 (C# で、フォーム アプリケーションを使用して、いくつかのテキスト ボックスに入力)、編集が完了するまでその行をロックする必要があります。同時に user2 が同じレコードを編集しようとする可能性があるためです。user1 が完了するまでにはすべて問題ありませんが、user2 が完了すると、検索していたレコード (名前) がもう存在しないことを上書きするか、エラーが返されます。
IsLocked
簡単な解決策は、ユーザーが行を編集できることに応じて、で列を追加することです。しかし、何らかの理由でアプリケーションがクラッシュしたり、ユーザーが強制的にタスク マネージャーでプロセスを停止したりすると、行は永久にロックされます。(または、これが発生している間にコードを実行する方法はまだありますか?)
もう 1 つの方法は、 を使用せずにクエリを実行することcommit transaction
です。そのためには、接続を開いたままにしておく必要があると思います。そうしないと、接続が終了します。アプリケーションの実行中に接続を開いたままにしておくことは、私にとっては良い考えではないように思えますか?
補足: タイトルには (my)sql と記載されています。これは、どちらを使用するのかよくわからないためです。
お時間いただきありがとうございます。