Проблемы
Предположим, что вы указали интервал сброса в максимальном количестве секунд в строке соединения перед тем, как зафиксированные транзакции будут сброшены на диск в Microsoft SQL server Compact 4,0. В этой ситуации зафиксированные транзакции могут занимать больше времени, чем интервал сброса для сброса на диск, или даже не может быть записано на диск. Кроме того, при некорректном завершении программы возникает потеря данных.
Решение
Исправление, устраняющее эту проблему, входит в пакет обновления исправлений по запросу для SQL Server Compact 4,0 с пакетом обновления 1 (SP1). За дополнительными сведениями о том, как получить этот пакет обновления исправлений по запросу для SQL Server Compact 4,0, щелкните следующий номер статьи базы знаний Майкрософт:
2960153 Пакет обновления исправлений по запросу для SQL Server Compact 4,0 с пакетом обновления 1 (SP1)
Обходное решение
Для решения этой проблемы используйте CommitMode. immediate для немедленного сброса изменений, вместо того чтобы полагаться на интервал сброса. Этот метод показан в следующем образце кода: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)
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".