トランザクションの種類

Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) では、明示的なトランザクションと自動コミット トランザクションの 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 メソッドを呼び出してトランザクションを開始します。fRetainingFALSE に設定された状態で ITransaction::Commit メソッドまたは ITransaction::Abort メソッドを呼び出すと、自動的に別のトランザクションを開始することなく、トランザクションを終了します。

メモ :
1 つの ADO .NET 接続に複数のトランザクションを作成し、個別のコマンドに割り当てることができます。
重要 :
ADO .NET API を使用してトランザクションをコミットする場合は、トランザクション内のすべての開いたデータ リーダーと結果セットを閉じる必要があります。

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

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

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

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

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

CREATE TABLE TestData (col int);

INSERT INTO TestData VALUES (1);

INSERTT INTO TestData VALUES (1);

メモ :
これらのクエリがバッチとして SQL Server に送信された場合、クエリがまとめて解析されるので、すべて失敗します。構文エラーが原因で、SQL Server でバッチ全体の実行プランを構築できなくなります。

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

参照

概念

トランザクション (SQL Server Compact Edition)
トランザクションの制御
トランザクションと接続

ヘルプおよび情報

SQL Server Compact Edition のサポートについて