我有两个进程连接到同一个 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) 将 Flush Interval 参数添加到您的连接字符串并将其设置为 1。在将数据刷新到 sdf 之前,这将有最多一秒的延迟。
2) 当您调用 Commit 时,使用允许您指定 CommitMode.Immediate 的参数化重载。这会立即将数据刷新到磁盘。
关于c# - SQL Server CE 没有从另一个进程中获取更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177202/