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 连接字符串是啥?的主要内容,如果未能解决你的问题,请参考以下文章