.net 只读访问数据源

.net 只读访问数据源,.net,database,ms-access,permissions,.net,Database,Ms Access,Permissions,我们有一个主要的VB6交易应用程序,它使用MS Access(不要问!),它总是将交易快速存入MS Access数据库 这里的基础设施的其余部分已经有了很大的发展,我希望定期阅读这个Access数据库,并将任何新的交易复制到SQL server数据库中 实现这一点所需的SQL和C#非常简单 但我想确保我这样做不会锁定Access数据库或导致VB6应用程序出现问题。换句话说,当从Access填充我的DataTable时,我不想锁定数据库并阻止VB6应用程序写入数据库。我似乎记得,在旧ADO中,有一

我们有一个主要的VB6交易应用程序,它使用MS Access(不要问!),它总是将交易快速存入MS Access数据库

这里的基础设施的其余部分已经有了很大的发展,我希望定期阅读这个Access数据库,并将任何新的交易复制到SQL server数据库中

实现这一点所需的SQL和C#非常简单

但我想确保我这样做不会锁定Access数据库或导致VB6应用程序出现问题。换句话说,当从Access填充我的DataTable时,我不想锁定数据库并阻止VB6应用程序写入数据库。我似乎记得,在旧ADO中,有一些共享模式可以用于此目的


我应该使用.NET中的哪种连接字符串来完成此任务?

只是一个想法。。。但是,您是否考虑过升级数据库,使表本身实际上存储在SQL Server中,而Access只是前端?已经有一段时间了,但如果我没记错的话,Access应该有一个向导(糟糕!)来帮助您完成这项工作

使用旧的ADO,您可以将光标或锁定类型机制设置为以下之一:

光标类型

adOpenForwardOnly此类型的光标只能用于在记录集中向前移动。当要填充列表框或组合框时,使用此选项

adOpenKeyset当我们需要一个大的记录集时,这是最好使用的游标类型,因为当对可能影响我们的记录集的数据进行更改时,我们不会得到通知

adOpenDynamic此光标允许我们查看其他用户对我们的记录集所做的所有更改。它是最强大的游标类型,但速度最慢

adOpenStatic当我们有一个小记录集时,静态光标很有用

锁定类型

adLockReadonly当不允许添加、更新或删除记录集时,使用此锁定模式

adLockPesimistic在悲观锁定中,一旦编辑开始,记录即被锁定,并保持锁定状态,直到编辑完成

adLockOptimistic对记录调用更新方法时会发生这种情况。即使在编辑时也会解锁记录,但在将更改保存到数据库时会临时锁定记录

AdLockBatchOptimium此选项允许我们在更新一批记录时执行乐观锁定


不知道这到底是如何转化为.NET世界的。。。但是,这可能会让您找到正确的方向。

连接到数据库的第一个用户确定在数据库打开期间使用的锁定模式

将连接字符串中的模式设置为“Read”就可以了

"Data Source=C:\IronSpeed\TestAccessDB\TestTypes.mdb;
Jet OLEDB:Database Locking Mode=1;
Mode=Read"
一些可能有用的链接


根据Matt的回答,我建议将adOpenForwardOnly和adLockReadonly:ForwardOnly结合使用,因为您只需要将这些交易插入SQL Server,而Readonly则不会锁定其他流程(还有什么会影响这些表?)。幸运的是,这些是默认选项。:)

有多种解决方案,比如通过ADO(OLEDB)连接打开只读记录集。这些记录集甚至可以在本地保存/存档为xml文件以供进一步使用


但最简单的解决方案是复制原始mdb文件(即使某些表被锁定,也可以随时复制)。然后,您可以对复制的数据库执行任何操作,而不会对正在运行的VB6应用程序造成任何干扰。

我很想将其更新到SQL Server,但遗憾的是,这不取决于我。这些家伙有一种“谁在乎它”的态度眼睛,Access确实有一个升级向导。。。这是可以接受的,但如果可行的话,你仍然需要自己修复这些表。更新这个应用程序需要的不仅仅是一个升级向导。。。目前只有更重要的优先事项。这就是生活!如果VB6应用程序把我锁在外面,我不在乎。。。我只是不需要把它锁在外面。这正是我所需要的!谢谢你,马特!让我知道你的结局如何!谢谢我不认为抄袭是答案。。。。这个数据库非常庞大。谁知道长时间运行的复制操作是否会导致问题..访问权限最多为2次,而且我在复制操作期间从未注意到任何问题(即使是在每天下午2点备份的记帐数据库上,当每个人都在工作时)。无论如何,您可以返回只读ADODB记录集,并将它们作为XML文件保存在本地(如果以后要重用它们)。