c# - SQL Server CE 没有从另一个进程中获取更新?

标签 c# .net sql sql-server-ce

我有两个进程连接到同一个 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/

相关文章:

PHP - 显示数据库中的图像

c# - 如何保护 Web API 和应用程序 (Azure AD) 使用的 Azure SQL 数据库的安全

c# - Yield 返回改变了链式调用方法的顺序

c# - 如何创建一个自定义属性,如果它返回 false 将重定向到登录,类似于授权属性 - ASP.NET MVC

mysql - 将新列作为外键添加到表中

sql - 当多个函数使用它时如何改变复合类型?

c# - 在C#中合并相同类型的xml节点

c# - function1 和 function2 是否以线程安全的方式使用我的串口类?

c# - 创建线程前台 VS Thread.Join()

c# - 方法注入(inject)(DI、.NET、IOC)