2012-02-20 5 views
0

私はデータベースに対するCRUD操作の基本をユーザーに許可するWebアプリケーションを作成しています。更新されているテーブルのレコード数が200未満で、複数のユーザーがこのアプリケーションを使用している可能性があります。2人のユーザーが互いの変更を上書きしないようにするには、ある種のロックメカニズムが必要です。datarowのセマフォー

私はセマフォを調べましたが、それは同じコードを実行しているユーザーの数を制限するようです。私のデータ層では、私は確かに特定のテーブルのクラスファイルでこれを採用することができますが、どういうわけかキーフィールドへのロックを制限することができますので、各テーブルのクラスファイルがありますか?

+0

データベースでロックがサポートされていませんか?なぜコードでそれを行うのですか? – Umbrella

+0

私は何かを忘れていない限り、ユーザ1と2が同じレコードをウェブページ(選択クエリ)にロードするのを止めず、それぞれの編集とサブミットの変更(更新クエリ)最新の。 – zkent

答えて

0

ASP .NETと一緒に適切なSQL実装を使用していると仮定すると、これを達成するためにトランザクションを使用しないのはなぜですか? Check it out here.

また、optimistic concurrencyを読んで、必要なものがあるかどうかを確認することもできます。基本的には、値を保存する前に、ユーザーは特定のフィールドの値が最初に読み取られたときと同じであるかどうかを確認します。値が同じ場合、他の誰もそれを上書きしていないとみなされ、新しい値がDBに保存されます。値が同じでない場合は、代わりに警告メッセージが返されます。

+0

ODBCを使用してDB2データベースに接続しています。 – zkent

+0

オプティミスティックな並行性(前にその言葉を聞いていなかった)が、私が向かっているアプローチです。今私は、データベースからデータを取得し、それをDTOに入れ、それをセッション変数に格納して、変更を送信する前に再度データベースと比較します。 – zkent

+0

構成ウィザードを使用してTableAdapterを使用すると、楽観的同時実行性を最小限に抑えることができます。 [http://msdn.microsoft.com/en-us/library/bb404102.aspx](「楽観的同時実行性をサポートするデータアクセスレイヤの作成」を検索)実際には、それは内蔵のプロパティです。ただし、最初にアダプタを使用することの欠点、つまりDBスキーマ/ SPの変更がアダプタに自動的に反映されないという欠点があります。ただし、既に別の場所で使用されている一連のストアドプロシージャがある場合は、これが最適なオプションだと思います:) – Rahul