Jet 4.0 OLE DB プロバイダのトランザクション分離レベル

今回初めて OLE DB.NET を使って Microsoft Jet 4.0 OLE DB に接続し、AccessMDBファイルを操作してみましたが、さすがに SQLServerMySQL と違い、注意点がいくつかあるようです。


トランザクションの分離レベル

OleDbConnection.BeginTransaction メソッドを使えば、トランザクション分離レベルを明示的に設定が可能です。MSDN の解説にはこうあります。

分離レベルを指定しない場合、基になるプロバイダの既定の分離レベルが使用されます。BeginTransaction メソッドを使用して分離レベルを指定するには、isolationLevel パラメータを受け取るオーバーロードを使用します。
OleDbConnection.BeginTransaction メソッド


試したところ Jet 4.0 OLE DB プロバイダ で MDB ファイルに接続した場合、トランザクション分離レベルで指定できるのは、IsolationLevel.ReadUncommitted か IsolationLevel.ReadCommitted の二種類のみ可能なようです。以下のように、RepeatableRead や Serializable を指定すると、

OleDbConnection _connection;
OleDbTransaction _transaction;

_connection = new OleDbConnection(connectString);
_connection.Open();
_transaction = _connection.BeginTransaction(IsolationLevel.Serializable);

・・・・・・

_transaction.Commit();
_connection.Close();

System.Data.OleDb.OleDbException
"分離レベルおよびその強化はサポートされていません。"


と例外が発生しました。分離レベルを他のデータプロバイダと同じように設定することはできないので、注意が必要みたいです。
もっとも MDB ファイル使うのはローカル環境がメインになると思いますので、分離レベルを明示的に設定するケースはほとんどないでしょうね(汗