Access 2013 的 OleDb 连接字符串是啥?

Posted

技术标签:

【中文标题】Access 2013 的 OleDb 连接字符串是啥?【英文标题】:What is the OleDb connection string for Access 2013?Access 2013 的 OleDb 连接字符串是什么? 【发布时间】:2013-03-26 09:54:27 【问题描述】:

我正在使用 Visual Studio 2012 创建一个 Web 应用程序,该应用程序使用以下编程线连接到 Access 2013 数据库:

string connectionString = "provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + Page.Server.MapPath("App_Data\\db1.accdb");

但由于错误而无法启动它

Microsoft.ACE.OLEDB.12.0 在本地机器中找不到

Microsoft Access 2013 的正确连接字符串是什么?

【问题讨论】:

您是否验证过Page.Server.MapPath() 返回有效路径,否则此连接字符串似乎没问题。您可以找到连接字符串here。 这是我的数据库分配,我已经验证了 我对我的回答做了另一个修改。 【参考方案1】:

作为 Web 服务器的计算机必须安装“Microsoft Access Database Engine 2010”。如果该机器上没有安装 Access,那么您可以下载引擎 here 的安装程序。

请注意,64 位安装程序包含 64 位版本;它不包括 32 位版本(在同一页面上单独提供)。

编辑...

关于连接字符串,我刚刚在我的 Access_2013 机器上测试了以下 VBScript,它运行良好。

Option Explicit
Dim con, rst
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Gord\Desktop\Database1.accdb;Persist Security Info=False;"
Set rst = CreateObject("ADODB.Recordset")
rst.Open "SELECT Col1 FROM Table1", con
Wscript.Echo rst(0).Value
rst.Close
Set rst = Nothing
con.Close
Set con = nothing

我从connectionstrings.com复制了连接字符串。

编辑...

如果您可以访问网络服务器,则可以检查以下两个文件是否存在:

C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

在 64 位计算机上,第一个文件指示已安装 64 位版本的 Access 数据库引擎。在 32 位机器上表示安装的是 32 位版本。

如果存在第二个 (x86) 文件,则您知道 32 位版本的 Access 数据库引擎存在于 64 位计算机上。

编辑重新:最终评论

问题确实与 Access 数据库引擎的“位数”有关:

我安装“Microsoft Access Database Engine 2010”64 位,我应该安装 32 位,因为我的 Visual Studio 是 32 位,感谢您的建议

【讨论】:

感谢您的回复,但它不起作用,它仍然弹出相同的错误:“Microsoft.ACE.OLEDB.12.0”提供程序未在本地机器上注册您知道吗?是 Microsoft Access 2013 的字符串连接吗? 如果我的来源是这样的:string connectionString = "provider=Microsoft.ACE.OLEDB.12.0;" + "数据源=" + Page.Server.MapPath("App_Data\\db1.accdb"); // 创建一个 OleDbConnection 对象来连接数据库 System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connectionString);我应该把它改成: @user712063 我不太确定您的连接字符串是问题所在。您在其他一个 cmets 中说过,您已验证 Page.Server.MapPath("App_Data\\db1.accdb") 正在返回 .accdb 文件的有效路径。我们的连接字符串之间唯一的实质性区别是我的最后添加了Persist Security Info=False;,我认为省略它不会导致您描述的错误消息。 @user712063 我刚刚注意到您的连接字符串没有尾随;。我知道它并不总是必需的,但也许在这种情况下,它的缺席会让事情变得混乱。事实上,为什么不尝试将;Persist Security Info=False; 附加到您现有的连接字符串中,看看是否有帮助。 haiz....... 我已经添加了 ;Persist Security Info=False;依旧报错:Microsoft.ACE.OLEDB.12.0 is not found in local machine【参考方案2】:

这取决于您安装的 office,如果您有 x64 位 office,则必须将应用程序编译为 x64 才能运行,因此如果您希望它在 x36 上运行,则必须安装 office x86 才能接受,我尝试了上述所有解决方案,但直到我意识到我有 Office x64bit 并且我将应用程序构建为 x64 并工作之前,都没有奏效。

我也意识到,如果你把它放到任何 cpu 上但不设置为首选 32 位也可以

【讨论】:

【参考方案3】:

让提供程序到 12.0 它适用于 ACCESS 2013

只需安装这两个元素:

1)Microsoft Access 2013 运行时: https://www.microsoft.com/en-us/download/details.aspx?id=39358

然后

2)microsoft access 数据库引擎 2007: https://www.microsoft.com/en-us/download/details.aspx?id=23734

PS:32 位 x86 和 64 位 x64。

【讨论】:

【参考方案4】:

这里用这个

provider=Microsoft.ACE.OLEDB.15.0

这是 ms access 2013 的连接字符串

【讨论】:

以上是关于Access 2013 的 OleDb 连接字符串是啥?的主要内容,如果未能解决你的问题,请参考以下文章

用于 excel 2013 的 OLEDB 连接字符串

部署 ACCESS OleDb 驱动程序

OleDB 锁复制 .NET MS Access

C# MD5 和/或其他加密 oledb (access 2007)

c#通过oledb连接Oracle代码

OLEDB 12.0 连接与 Excel 2010 和 Excel 2013 兼容