1

私は と が初めてC#ですSQL Server

を使用してアプリケーションを開発していますWinforms

を使用してdatasetいます。

マスター トランザクションと詳細トランザクションで、データベースから 1 つのトランザクションを取得するとします。同時に、別のユーザーも同じトランザクションを取得します。

私の要件は、このトランザクションを変更するとき、他の誰も同じトランザクションを更新または削除できないようにすることです。

モードのようdatasetdisconnect、ロック機構を実現するにはどうすればよいですか?

4

2 に答える 2

1

C# を使用していると仮定して正しい場合は、いくつかの ORM フレームワークを調べる必要があります。これらのフレームワークは、このような衝突を処理できるか、または発生したときに少なくとも警告を発して、コードでそれらを処理できるようにするためです。したがって、たとえば、他の誰かが変更を行ったことをユーザーに通知して表示を更新したり、変更をマージしてマージされたデータを保存したりできます。

エンティティフレームワークを見てください。文字通りたくさんのチュートリアルとサンプルが用意されています。これで始められるはずです。

http://www.asp.net/entity-framework

http://msdn.microsoft.com/en-us/library/bb386876.aspx

これは特にデータの同時実行性を参照します (その MVC ですが、原則は同じです)

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

于 2013-08-13T16:39:06.963 に答える
1
using (var transaction = connection.BeginTransaction())
{

  adapter.Update(dataSet); 

  transaction.Commit();
}

更新がテーブル内の少数の行に対するものである場合、SQL サーバーは呼び出し元に行レベルのロックを許可します。変更が多数の行に対するものである場合、SQL サーバーはテーブル レベルのロックを許可します。そのすべての自動。したがって、並行性が考慮されます。

ただし、問題は、多くのユーザーが同じ行セットで同時に作業していると、デッド ロックの可能性が高くなることです。Udi Dahan によって促進された新しいCQRS 設計パターンがそれを処理します。ただし、アプリケーションが小さい場合、CQRS を適用するのはやり過ぎです。

于 2013-08-13T17:27:14.213 に答える