如果有人想知道,我正在使用以下连接字符串连接到我的Access数据库:
// Set the data source string.
_sqlCon = new OleDbConnection(
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=True", databasePath)
);
更新 #0
我在微软MSDN网站上找到了一些关于ADO中adLockOptimistic
的信息(https://msdn.microsoft.com/en-us/library/ee252458(v=bts.10).aspx),但这可能完全不相关,因为我正在使用OLE。
更新 #1
我尝试将以下内容添加到连接字符串中:
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=True;LockType=3;"
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=True;Lock Type=3;"
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=True;LockType=adLockOptimistic;"
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=True;Lock Type=adLockOptimistic;"
导致以下异常的原因:
找不到可安装的 ISAM。
我本来以为它不会起作用,但是嘿,如果你不尝试,谁知道呢。
更新 #2
如果可以在我的 Access 数据库中定义此属性,则此解决方案也完全可以!然而,这应该是一个数据库设置,而不是特定于客户端的设置,而且 如果 可以从 C#来完成,那么我更喜欢这种方法。
上下文信息:
我正在对我的 Access 数据库(通过网络)进行并发压力测试。 我有大约 20 多个客户端(小的 C# 程序),它们正在尽可能快地读取相同记录和相同表格 中的数据。 这会产生很多
database is in 'Admin' mode by ..
异常,我在我的 C# 客户端中捕获这些异常。 我想能够同时读取这些记录以解决一个应用程序中的更大问题。 我可以通过切换到一个“真正的”数据库系统轻松解决这个问题,但不幸的是这是不可能的。如果以上问题以任何其他方式解决,我仍然非常有兴趣了解如何告诉 Access 使用不同的锁定类型(从 OleDb/C#)。
System.Data.IsolationLevel.ReadUncommitted
的OleDbTransaction
吗? - Gord ThompsonJet OLEDB:Database Locking Mode=1
连接字符串设置来启用行级锁定(这与乐观锁定不同,但它是一个因素)。 - Jeroen Mostert