我认为您的连接字符串没有问题。我仍然会从 VBA 中尝试一下,看看这种努力是否能解决这个问题。
无论我用“accdb”还是“xxx”文件扩展名命名 db 文件,这个都是从 Access 2007 开始工作的。我的密码不需要单引号;无论我是否包含单引号,代码都会成功。
Public Sub OleDbToEncryptedAccdb()
'Const cstrDb As String = "encryptd.accdb" '
Const cstrDb As String = "encryptd.xxx"
Const cstrFolder As String = "C:\share\Access"
Const cstrPassWord As String = "letmein"
Dim cn As Object
Dim strConnect As String
strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
cstrFolder & Chr(92) & cstrDb & _
";Jet OLEDB:Database Password='" & cstrPassWord & "';"
Debug.Print strConnect
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = strConnect
cn.Open
cn.Close
Set cn = Nothing
End Sub
编辑:显然 Access 2010 提供了比早期 Access 版本更强大的加密方法。在db.xxxAccess 2010 中打开,检查哪个 ACE 版本用作Provider.
? CurrentProject.Connection.Provider
如果它回复类似Microsoft.ACE.OLEDB.14.0的内容,请在您的 c# 连接字符串中使用它。