将连接字符串从 Microsoft.Jet.OLEDB.4.0 转换为 Microsoft.ACE.OLEDB.12.0 提供程序

Posted

技术标签:

【中文标题】将连接字符串从 Microsoft.Jet.OLEDB.4.0 转换为 Microsoft.ACE.OLEDB.12.0 提供程序【英文标题】:Converting connection string from Microsoft.Jet.OLEDB.4.0 to Microsoft.ACE.OLEDB.12.0 provider 【发布时间】:2015-06-01 19:18:53 【问题描述】:

我正在使用一个 .NET 程序,该程序将在未来的某个时间进行 64 位编译,而 Microsoft.Jet.OLEDB.4.0 将无法工作。

我正在尝试转换如下所示的 Microsoft.Jet.OLEDB.4.0 连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;OLE DB Services=-4;Password=<PASSWORD>;User ID=<USERID>;Data Source=<ACCESSDATABASE>.MDB;Persist Security Info=True;Jet OLEDB:System database=<SYSTEMDB>.mdw"

到类似于以下内容的 Microsoft.ACE.OLEDB.12.0:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<ACCESSDATABASE>.mdb;Jet OLEDB:Database Password=<PASSWORD>;Jet OLEDB:System database=<SYSTEMDB>.mdw;Persist Security Info=False"

每当我尝试使用这个新的连接字符串进行连接时,都会出现以下异常:

System.Data.OleDb.OleDbException (0x80040E4D): Not a valid account name or password.

有人知道如何正确转换此连接字符串以使其有效吗?据我所知,没有关于 Microsoft.ACE.OLEDB.12.0 连接字符串参数的文档。

【问题讨论】:

我刚刚在下面发布我的答案后注意到,如果您的 Data Source 包含空格,您可能需要在其周围加上引号。 你有没有找到解决这个问题的方法? 【参考方案1】:

这是我用于Microsoft.ACE.OLEDB.12.0ConnectionString,它工作正常。

Provider=Microsoft.ACE.OLEDB.12.0; Data Source="$LOCALAPPDATA$\Path\database.mdb"; Persist Security Info=True; Jet OLEDB:Database Password=$PASSWORD$

我在您的ConnectionString 中看到的唯一区别是指定系统数据库。也许那个数据库也有密码?

【讨论】:

以上是关于将连接字符串从 Microsoft.Jet.OLEDB.4.0 转换为 Microsoft.ACE.OLEDB.12.0 提供程序的主要内容,如果未能解决你的问题,请参考以下文章

如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?

将连接字符串从 Microsoft.Jet.OLEDB.4.0 转换为 Microsoft.ACE.OLEDB.12.0 提供程序

将json字符串从外层到最内层依次连接,平铺成一个List<String>

从单个ECHO命令输出的连接文本文件在预期输出后第二次将字符插入到字符串中

当我在 3 层架构中使用 ado.net 模型并尝试将数据从 DAL 加载到 UI 时,它会在 UI app.config 中询问连接字符串

从 web.config 读取连接字符串