C# SQL Server CE没有从另一个进程接收更新?

C# SQL Server CE没有从另一个进程接收更新?,c#,.net,sql,sql-server-ce,C#,.net,Sql,Sql Server Ce,我有两个进程连接到同一个sqlce.sdf数据库文件。一个向表中插入项,另一个从表中读取所有记录。插入后,我可以使用服务器资源管理器确认行是否存在,但第二个过程中的查询没有显示行: this.traceMessages.Clear(); SqlCeCommand command = new SqlCeCommand("SELECT AppName, Message, TraceId FROM Messages", this.connection); using (var reader = c

我有两个进程连接到同一个sqlce.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")
            });
    }
}
它通常可以在第一次正确加载,但即使在重新启动进程后也不会拾取更新。连接字符串只有一个简单的
数据源
,我已经确认它指向两个进程上的同一个文件

有人知道为什么会这样吗?我是否可以启用某些设置,以便从单独的进程中获取更新以使其正常工作?

这是因为与“传统”数据库不同,您写入的数据不会立即刷新到磁盘,而是延迟并在一段时间后发生

在写作程序中有两种选择:

1) 将Flush Interval参数添加到连接字符串中,并将其设置为1。在将数据刷新到sdf之前,这将有一秒的延迟


2) 调用Commit时,请使用参数化重载,该重载允许您指定CommitMode.Immediate。这将立即将数据刷新到磁盘。

我用CommitMode.Immediate将插入内容包装在一个事务中,但它仍在做同样的事情。这很奇怪。如果服务器资源管理器可以看到它们,但您的应用程序无法看到,那么我唯一能想到的另一件事是阅读应用程序没有读取正确的文件。我知道你已经检查过了,但是再检查一次可能不会有什么坏处。是的,指向同一个文件确实有问题!当我对项目文件夹中的.sdf进行更新时,app config连接字符串中的
|DataDirectory | \Traces.sdf
指向bin文件夹中的.sdf。我很困惑,因为当我手动更新服务器资源管理器中的值时,更新会成功。我猜它是从项目文件SDF中读取的,有时会对这两个文件进行更新?您可以共享/检查两个连接字符串吗?它们有完整的路径吗?