本地计算机上多个进程的 SQL CE 文件共享冲突
Posted
技术标签:
【中文标题】本地计算机上多个进程的 SQL CE 文件共享冲突【英文标题】:SQL CE file sharing violation for multiple processes on local machine 【发布时间】:2013-12-09 14:59:24 【问题描述】:参考问题How do I share a SQL Server CE database file (.sdf) for multiple processes?
根据 MSDN,SQL CE 允许 256 个并发连接到单个数据库。
但即使在同一台机器上,当我使用 2 个不同的进程(a.exe 和 b.exe,代码相同)打开同一个数据库时,我也会遇到共享冲突错误。这里似乎有什么问题?
我使用的是连接字符串
SqlCeConnection("Data Source=d:\test.sdf;Encrypt Database=True;Password=test;File Mode=read write;")
【问题讨论】:
您需要连接到服务而不是文件以进行并发访问。不确定 CE 是否有服务。它们指的是 Web 场景中的 256 个连接。 @Blam 你能给我看一些示例代码吗?我正在尝试让 2 个进程访问同一个数据库(读取和写入) 您可能需要将数据公开......作为服务(WebApi 的 WCF)......并让 2 个不同的应用程序/进程与该服务通信......并拥有服务与数据库对话......连接与进程不同。此外,Microsoft Access 16bit 表示它支持 255 个连接,但那是罂粟公鸡。我认为他们后来将其修改为 10-15 是合理的。想想..在一个网络应用程序(或类似的)中,您可以快速打开和关闭连接..它们不会存在和逗留。但我会考虑 WCF(或 WebApi)路由,而不是 2 个不同的进程访问此文件........ 不,我无法向您展示示例代码,因为我认为 CE 没有服务。请参阅您引用的链接。 对。没有“服务”。 (就像一个成熟的 sql-server 一样)。因此,您必须自己动手。 WCF 或 WebApi 将是通常的嫌疑人。 【参考方案1】:这不是您想听到的答案,但您永远不应该尝试从多个进程打开 SQL CE 文件。是的,我知道,SQL CE 4.0 允许多个写入者,并且您认为您永远不会有多个写入者写入同一个记录,但这就像认为只要您戴上眼罩就可以安全地使用燃烧的电锯。
SQL CE 修改实时数据文件中更改的字节。您不能从多个进程可靠地做到这一点。你认为你可以,但你不能。阅读您引用的问题的accepted answer;使用面向服务的数据库,如 SQL Express。
【讨论】:
但是按照technet.microsoft.com/en-us/library/ms171817.aspx“读写”模式“允许多个进程打开和修改数据库”,是不是可以? 我认为你不明白按照你的要求去做有多么困难;您实际上必须自己编写 SQL Server Express。很容易犯一些细微的错误,这些错误会破坏您的数据并且不会留下任何痕迹。不要走这条路,使用 SQL Express,这是它的设计目的,而 SQL CE 不是。【参考方案2】:在我的情况下,该文件以某种方式被锁定。我在线使用 TFS 并且 sdf 文件处于锁定/编辑模式,尽管我已经检查了该文件并从文件属性中删除了只读标志。
要修复它,我必须打开 tfs 源代码管理资源管理器并解除锁定。
请确保文件没有被锁定。
注意:这是一篇旧帖子,但我只是添加此答案,以便对面临此问题的人有所帮助。
【讨论】:
以上是关于本地计算机上多个进程的 SQL CE 文件共享冲突的主要内容,如果未能解决你的问题,请参考以下文章
无法启动SQL Sever(MSSQLSERVER)服务(位于本地计算机上)错误 1067进程意外终止?怎么解决啊???求解
无法启动SQL Sever(MSSQLSERVER)服务(位于本地计算机上)错误 1067进程意外终止?怎么解决啊???求解
无法启动SQL Sever(MSSQLSERVER)服务(位于本地计算机上)错误 1067进程意外终止