RandomEngy
RandomEngy

Reputation: 15413

SQL Server CE not picking up updates from another process?

I've got two processes with connections to the same SQL CE .sdf database file. One inserts items into a table and the other reads all the records from the table. After the insert I can confirm the rows are there with the Server Explorer but my query from the second process does not show them:

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")
            });
    }
}

It can generally load up correctly the first time but doesn't pick up updates, even after restarting the process. The connection string just has a simple Data Source that I've confirmed is pointing to the same file on both processes.

Anyone know why this is happening? Is there some setting I can enable to get updates from separate processes to work?

Upvotes: 3

Views: 283

Answers (1)

competent_tech
competent_tech

Reputation: 44971

This is because unlike "traditional" databases, the data that you write is not flushed to disk immediately, it is deferred and happens some time later.

You have two choices in the writing program:

1) Add the Flush Interval parameter to your connection string and set it to 1. This will have a lag of up to a second before the data is flushed to the sdf.

2) When you call Commit, use the parameterized overload that allows you to specify CommitMode.Immediate. This will flush data to disk immediately.

Upvotes: 2

Related Questions