我在测试服务器上收到错误"'Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册"。所以我的问题是:
i) 我可以添加"Microsoft.ACE.Oledb.12.0.dll"的引用来自行投影吗?ii)安全吗?iii)如何做到这一点?
自从我的机器上安装了最新版本的office以来,所有的东西都在我的本地机器上工作。一旦我把我的代码部署到测试服务器上,我就克服了错误。我可能无法在测试服务器上安装Office(由于某些原因)。所以,是否可以将所有必需的dll放入项目本身,并将其部署到测试服务器上?
提前谢谢。
要使用"Microsoft.ACE.OLEDB.12",您需要安装"Microsoft Access Database Engine 2010 Redistributable"
此信息页面位于此处:http://www.microsoft.com/en-us/download/details.aspx?id=13255
正如@user1297578正确指出的那样,实际下载如下:http://www.microsoft.com/en-in/download/confirmation.aspx?id=13255
一旦你安装了它,实际的程序集被称为ACEOLEDB.DLL
,以下命令在命令提示符下会在你的系统上为你找到它:
C:>DIR /s/b c:ACEOLEDB.DLL
c:Program FilesCommon FilesMicrosoft SharedOFFICE14ACEOLEDB.DLL
作为参考,以下是我从一个程序收到的错误消息,直到我安装了上面的可再发行文件:
Connection Failed.
Error from IDataInitialize::GetDataSource
with connectionString=Data Source=C:MyFileName.mdb;Mode=Share Deny Write;Provider=Microsoft.ACE.OLEDB.12.0;User Id=admin
OLE DB Error Report:
ErrorRecord:
Hresult=80040154
Description: Class not registered
SQLErrorInfo: No error info available
Source: Microsoft OLE DB Service Components
您可以通过在安装项目中添加Microsoft Access Database Engine 2010作为先决条件来解决您的问题,下面的链接向您展示了如何做到这一点,但要小心,如果您使用VS2017,则路径不同,VS2017的路径为:
"C:\Program Files(x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages"
不是
"C:\Program Files\Microsoft SDK \Windows\v7.0A\Bootstrapper\Packages"
我还注意到,在某些情况下,您必须在用户的计算机上安装"AccessDatabaseEngine.exe",而不是"AccessDatabaseEngine X64.exe",即使它是64位窗口!!!
这篇文章包括一段视频,展示了如何一步一步地完成这一切:
https://csharp-tutorials1.blogspot.com/2017/12/add-microsoft-access-engine-2010-as.html
向致以最良好的问候
如果您想使用AccessDatabaseEngine 64和IIS 64位(例如windows 2012 64位),请遵循
-
您必须在IIS 上添加角色asp.net 4.0、.net 4.0
-
打开IIS管理器
-
打开您网站的应用程序池的建议设置
-
启用设置为False的32位应用程序(必须这样做,或者不设置为32位引擎)
-
如果您的网站使用.net 4.0,则.net Framework版本设置为版本
6.[这是关键点!!]托管管道模式设置为"经典"
祝你好运:)