トランザクションの種類

Microsoft SQL Server Compact 3.5 では、明示的なトランザクションと自動コミット トランザクションの 2 種類のトランザクションがサポートされています。

明示的なトランザクション

明示的なトランザクションは、トランザクションの開始と終了の両方をユーザーが明示的に定義するものです。これは、SQL ステートメントまたはデータベース API 関数のいずれかを使用して指定できます。

SQL ステートメント

SQL Server Management Studio を使用することで、以下の SQL ステートメントを使用して明示的なトランザクションを定義できます。

  • BEGIN TRANSACTION

    接続の明示的なトランザクションの開始位置をマークします。

  • COMMIT TRANSACTION

    エラーが発生していなければ、トランザクションを正常に終了します。トランザクションによって変更されたすべてのデータは、データベースの不変の部分になります。トランザクションで保持されていたリソースが解放されます。

  • ROLLBACK TRANSACTION

    エラーが発生したトランザクションを消去します。トランザクションによって変更されたすべてのデータは、トランザクションの開始時の状態に戻されます。トランザクションで保持されていたリソースが解放されます。

ADO.NET と OLE DB

明示的なトランザクションは、ADO.NET と OLE DB でも使用できます。

ADO.NET では、SqlCeConnection オブジェクトで BeginTransaction メソッドを使用して、明示的なトランザクションを開始します。トランザクションを終了するには、SqlCeTransaction オブジェクトの Commit メソッドまたは Rollback メソッドを呼び出します。

OLE DB では、ITransactionLocal::StartTransaction メソッドを呼び出してトランザクションを開始します。fRetaining が FALSE に設定された状態で ITransaction::Commit メソッドまたは ITransaction::Abort メソッドを呼び出すと、自動的に別のトランザクションを開始することなく、トランザクションを終了します。1 つの ADO.NET 接続に複数のトランザクションを作成し、個別のコマンドに割り当てることができます。

重要

ADO.NET API を使用してトランザクションをコミットする場合は、トランザクション内のすべての開いたデータ リーダーと結果セットを閉じる必要があります。

自動コミット トランザクション

自動コミット モードは、SQL Server Compact 3.5 の既定のトランザクション管理モードです。すべての SQL ステートメントは、完了時にコミットまたはロールバックされます。この既定のモードが明示的なトランザクションによってオーバーライドされていない場合は必ず、SQL Server Compact 3.5 接続は自動コミット モードで実行されます。ADO.NET と OLE DB の既定のモードも自動コミット モードです。

BEGIN TRANSACTION ステートメントにより明示的なトランザクションが開始されるまで、SQL Server Compact 3.5 接続は自動コミット モードで実行されます。明示的なトランザクションがコミットまたはロールバックされると、SQL Server Compact 3.5 は自動コミット モードに戻ります。

コンパイルとランタイム エラー

SQL Server とは異なり、SQL Server Compact 3.5 ではステートメントはバッチ処理されません。SQL Server Compact 3.5 では、ステートメントを一度に 1 つずつ処理し、各ステートメントを個別に実行します。特定のステートメントで返されたエラーは、そのバッチに含まれるその他のステートメントには影響しません。たとえば、SQL Server Management Studio を使用して SQL Server Compact 3.5 で以下の一連のクエリを実行した場合、最初の 2 つのクエリは成功しますが、3 番目のクエリは構文エラーが原因で失敗します。

CREATE TABLE TestData (col int);

INSERT INTO TestData VALUES (1);

INSERTT INTO TestData VALUES (1);

注意

これらのクエリがバッチとして SQL Server に送信された場合、クエリがまとめて解析されるので、すべて失敗します。構文エラーが発生すると、SQL Server でバッチの実行プランは構築されません。

操作を実行中の上位のトランザクションでは、トランザクションがロールバックされることもコミットされることもありません。

関連項目

その他の技術情報

トランザクション (SQL Server Compact)

トランザクションの制御

トランザクションと接続