SQL Server CE не получает обновления от другого процесса? - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть два процесса с подключениями к одному и тому же файлу базы данных SQL CE .sdf. Один вставляет элементы в таблицу, а другой читает все записи из таблицы. После вставки я могу подтвердить наличие строк с помощью обозревателя серверов, но мой запрос из второго процесса не показывает их:

this.traceMessages.Clear();

SqlCeCommand command = new SqlCeCommand("SELECT AppName, Message, TraceId FROM Messages", this.connection);

using (var reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        this.traceMessages.Add(
            new TraceMessage
            {
                AppName = reader.GetString("AppName"),
                Message = reader.GetString("Message"),
                TraceId = reader.GetString("TraceId")
            });
    }
}

Обычно он может загружаться правильно с первого раза, но не получает обновления, даже после перезапуска процесса. У строки подключения просто есть Data Source, который, как я подтвердил, указывает на один и тот же файл в обоих процессах.

Кто-нибудь знает, почему это происходит? Есть ли какие-либо настройки, которые я могу включить для получения обновлений от отдельных процессов для работы?

1 Ответ

2 голосов
/ 18 ноября 2011

Это связано с тем, что в отличие от «традиционных» баз данных, записываемые вами данные не сразу записываются на диск, они откладываются и происходят через некоторое время.

У вас есть два варианта в программе письма:

1) Добавьте параметр Flush Interval в строку подключения и установите его в 1. Это будет иметь задержку до секунды, прежде чем данные будут сброшены в sdf.

2) Когда вы вызываете Commit, используйте параметризованную перегрузку, которая позволяет вам указать CommitMode.Immediate. Это немедленно сбросит данные на диск.

...