1

現在プログラミングしている環境 (WebMatrix を使用した C#.Net WebPages、SQL Server CE を使用) でデータベース トランザクションを使用することを検討しており、このトピックについて多くのことを読みました。

最初は、自分のプロジェクトには 100% 必要だと感じていたので、これを調べていましたが、今では、デフォルトの "Last-in-wins" 同時実行ポリシーが私のやや単純な CRUD システムでうまく機能することに気付きました。

今、私はこれについて 100% 必要だと本当に言うほど十分な知識を持っていませんが、可能であれば、そうでなければデータベースに何度もアクセスしなければならないすべてのステートメントを次のように収束させたいと考えています。データベースをロックする必要がある回数を最小限に抑えるために、1 つのステートメントを使用します (繰り返しますが、これを心配する価値があるかどうかはわかりませんが、単一のステートメントの方がクリーンで効率的で、おそらくさらに少なくなるように感じます)。エラーを起こしやすい)。

サーバー側のコードには、ID 番号を再利用できるかどうかに応じて、追加する必要がある行ごとにデータベースに対してINSERT INTOまたはステートメントを実行する必要がある論理分岐がいくつかあります。UPDATE問題は、トランザクション以外に、複数のUPDATEand/orINSERTステートメントを 1 つの通信可能なステートメントに結合する方法がないことです。

最後に、自分の環境でのトランザクション構文を自分で確認したところ、トランザクションがどのように機能するかを説明しているページを多数見つけましたが、その構文例は提供されていません。私はこのページを見つけました...:

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlcecommand.transaction(v=vs.100).aspx

...実際には私の環境とサーバー側のコードを正確にターゲットにしていますが、使用されている構文は、入力中に Intellisence で表示されません。これは、常に構文が間違っていることを示す兆候でした。ただし、このページでは、これをどのように論理的に設定する必要があるか (「try」、「catch」、さらには「finally」を使用) を簡単に確認でき、それは私にとって完全に理にかなっています。私の問題は、トランザクションを実際にコンパイルする方法について、特定の環境の構文が見つからないことです。

SQL Server CE 環境を使用して、WebMatrix を使用した C#.Net WebPages 内で、複数のINSERTandステートメントを使用してデータベース トランザクションをコンパイルするために必要な構文の例を提供できる人はいますか?UPDATE

4

2 に答える 2

1

トランザクションは、データベースに対して実行されるコマンドの数を減らすメカニズムを提供しません。これを行うには、ステートメントのバッチ処理を行います。セミコロンをステートメントの区切り記号として使用します。

"INSERT INTO table1 VALUES (x,y,z); INSERT INTO table2 VALUES(1,2,3)"

その後、ワンショットでロットを実行できます。

command.ExecuteNonQuery(sql);

これにより、データベースへの 1 回の呼び出しが行われ、目的が達成されます。

でも:

SQL Compact はバッチ ステートメントをサポートしていません。したがって、それらを使用することはできません。各ステートメントを順番に実行する必要があります。

挿入が実行されているときに、データベースのロックを心配する必要はありません。数ナノ秒かかり、データベース自体が要求を処理またはキューに入れ、ユーザーが影響を受けないようにします。

于 2013-11-02T11:00:00.610 に答える