我最近将我的数据库从.mdb(MS Access 2003)更新为.accdb(MS Access 2010)。
通过此次更新,我还将我的提供商从Microsoft.Jet.OLEDB.4.0
更新为Microsoft.ACE.OLEDB.12.0
当我使用没有密码的.accdb文件时,连接正常,但是一旦我选择
使用密码加密
尝试打开连接时收到以下错误。
无法打开数据库''。它可能不是您的数据库 应用程序识别,或文件可能已损坏。
使用过的连接字符串:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\App\\Main\\bin\\Debug\\db.xxx;
Jet OLEDB:Database Password=MyPass;
注意:我为.accdb文件使用自定义扩展,这用于.mdb文件没有问题,我认为这不应该是一个问题(测试)。
答案 0 :(得分:1)
我没有看到您的连接字符串有问题。我仍然会从VBA尝试看看这项努力是否能解决这个问题。
这个是从Access 2007开始的,我是否使用“accdb”或“xxx”文件扩展名命名了db文件。我的密码周围不需要单引号;无论我是否包含单引号,代码都成功了。
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 2010中打开db.xxx
后,请检查哪个ACE版本用作Provider
。
? CurrentProject.Connection.Provider
如果它回复Microsoft.ACE.OLEDB.14.0
之类的内容,请在c#连接字符串中使用它。