我有一个API,可以打开一个用于读写的访问数据库。 API在构造时打开连接,并在被破坏时关闭连接。打开数据库时,会创建一个.ldb
文件,当它关闭时,它会被删除(或消失)。
有多个应用程序使用API来读取和写入访问数据库。我想知道:
ldb
文件是否用于跟踪多个连接db.close()
是关闭所有连接还是只关闭一个实例。 答案 0 :(得分:2)
db.Close()关闭一个连接。关闭所有连接后,将自动删除.ldb。
请记住,虽然Jet数据库(即Access)确实支持多个并发用户,但它们并不是非常适合非常大的并发用户群;首先,当出现网络问题时,它们很容易被破坏。我现在正在处理这个问题。如果是这样,您将需要使用数据库服务器。
那就是说,我已经多次使用Jet数据库了。
当您说“同步问题”时,不确定您的意思。
答案 1 :(得分:1)
Close()
仅关闭一个连接,其他连接不受影响。实际上,MS Access不是多连接使用场景的最佳解决方案。 您可以查看SQL Server Compact这是MS SQL Server的简易版本。它在进程中运行,支持多个连接和多线程,大多数强大的T-SQL功能(不包括存储过程)等。
答案 2 :(得分:1)
作为对其他好答案的补充说明,我强烈建议在客户端应用程序的生命周期内保持与虚拟表的连接。
过于频繁地关闭连接并允许每次创建/删除锁定文件是一个巨大的性能瓶颈,并且在某些情况下快速访问数据库实际上会导致查询和插入失败。
你可以在我前一段时间的this answer中阅读更多内容。
在性能和可靠性方面,您可以从Access数据库中获得很多,只要记住一些事项:
在客户端的生命周期内保持连接对虚拟表开放(或者至少使用一些超时,如果你不想保留它就会在20秒不活动后关闭连接一直打开。)
设计您的客户端应用程序以正确关闭所有连接(包括我没时间做的虚拟连接),无论发生什么(例如崩溃,用户关闭等)。
保留锁定并不好,因为这可能意味着客户端已将数据库置于未知状态,并且如果其他客户端继续保持过时锁定,则可能增加损坏的可能性。
定期压缩和修复数据库。让它成为夜间任务 这将确保数据库得到优化,并且删除任何陈旧数据并正确关闭打开锁。
良好,稳定的网络连接对于基于文件的数据库的数据完整性至关重要:避免像瘟疫这样的WiFi。
有办法从数据库服务器本身踢出所有客户端
例如,有一个表格,例如客户定期轮询的MaintenanceLock
字段。如果设置了该字段,则在给予用户保存其工作的机会后,客户端应断开连接
同样,当客户端应用程序启动时,请检查数据库中的此字段以允许或禁止客户端连接到它
现在,您可以随时快速退出客户,而无需访问每个用户并要求他们关闭应用程序。确保当您运行Compact& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;修理维护。