トランザクションの種類

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

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

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

SQL ステートメント

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

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

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

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

CREATE TABLE TestData (col int);

INSERT INTO TestData VALUES (1);

INSERTT INTO TestData VALUES (1);

注意

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

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

関連項目

概念

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

トランザクションの制御

その他の技術情報

トランザクションと接続