現象
Microsoft SQL Server Compact 4.0 でコミットされたトランザクションをディスクにフラッシュする前に、接続文字列の最大秒数として、 フラッシュ間隔 を指定したとします。 この場合、コミットされたトランザクションの時間は、ディスクにフラッシュするか、ディスクにフラッシュされる場合よりもずっと長い時間がかかることがあります。 さらに、異常なプログラムが終了すると、データが失われます。
解決方法
この問題を解決する修正プログラムは、SQL Server Compact 4.0 Service Pack 1 のオンデマンドの修正プログラムパッケージに含まれています。 このオンデマンドの SQL Server Compact 4.0 用の修正プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
2960153 SQL Server Compact 4.0 Service Pack 1 のオンデマンド修正プログラムパッケージ
回避策
この問題を回避するには、Commitmode を使って、フラッシュ間隔に頼るのではなく、直ちに変更をフラッシュします。 次のサンプルコードは、この手法を示しています。conn.ConnectionString = "Data Source = c:\temp\SalesData.sdf; " conn.Open() Dim tx As SqlCeTransaction tx = conn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted) com = conn.CreateCommand() com.Transaction = tx Dim a As Integer a = 101 While (a <= 1000) com.CommandText = "insert into Orders values (" + Convert.ToString(a) + ", 'best', 200)" com.ExecuteNonQuery() a = a + 1 End While tx.Commit(CommitMode.Immediate)
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。