我们有一个主要的VB6交易应用程序,它使用MS Access (不要问!)它总是将交易输入到MS Access数据库。
这里的基础设施的其余部分已经有了相当大的发展,我希望定期读取此Access数据库,并将所有新交易复制到SQL server数据库中。
完成此操作所需的SQL和C#非常简单。
但我想确保我这样做的方式不会锁定Access数据库或给VB6应用程序带来问题。换句话说,当从Access填充我的DataTable时,我不想锁定数据库并阻止VB6应用程序向其写入数据。我似乎记得在旧的ADO中,有一些共享模式可以用于此目的。
我应该使用.NET中的哪种连接字符串来完成此操作?
发布于 2008-11-14 16:07:29
为了构建Matt的答案,我建议组合使用adOpenForwardOnly和adLockReadonly: ForwardOnly,因为您只需要将这些交易插入到SQL Server中,并且只读,这样您就不会锁定其他进程(还有什么会影响这些表?)。幸运的是,这些都是默认选项。:)
发布于 2008-11-14 15:55:42
只是一个想法..。但是,您是否考虑过升级数据库,以便表本身实际上存储在SQL Server中,而Access只是作为前端?这已经有一段时间了,但是如果我没记错的话,Access应该有一个向导(讨厌!)来帮助你做到这一点。
使用旧的ADO时,您可以将光标或锁类型机制设置为以下选项之一:
游标类型
adOpenForwardOnly此类型的游标只能用于在记录集中向前移动。当要填充列表框或组合框时,使用此选项。
adOpenKeyset当我们需要一个大的记录集时,这是最好的游标类型,因为当对可能影响我们的记录集的数据进行更改时,我们不会得到通知。
adOpenDynamic此游标允许我们查看其他用户所做的影响我们的记录集的所有更改。它是功能最强大但速度最慢的游标类型。
adOpenStatic当我们有一个很小的记录集时,静态游标是很有用的。
锁类型
adLockReadonly当不允许从记录集中添加、更新或删除任何内容时,将使用此锁定模式
adLockPesimistic在悲观锁定中,记录在编辑开始时立即锁定,并且在编辑完成之前一直处于锁定状态。
adLockOptimistic在记录上调用update方法时会发生这种情况。记录即使在编辑时也处于解锁状态,但在将更改保存到数据库时会被临时锁定
adLockBatchOptimistic此选项允许我们在更新一批记录时执行乐观锁定
不确定这是如何准确地转化为.NET世界的……但也许这能让你找到正确的方向。
发布于 2008-11-14 16:03:21
连接到数据库的第一个用户确定在该数据库打开期间使用的锁定模式。
将连接字符串中的模式设置为"Read“应该可以做到这一点。
"Data Source=C:\IronSpeed\TestAccessDB\TestTypes.mdb;
Jet OLEDB:Database Locking Mode=1;
Mode=Read"一些可能会有帮助的链接。
https://stackoverflow.com/questions/290475
复制相似问题