Sha*_*ahu 408 .net c# vb.net excel ole
我正在尝试通过按钮单击事件从Excel文件中获取数据.我的连接字符串是:
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";
Run Code Online (Sandbox Code Playgroud)
当我点击按钮时,我收到以下错误:
"Microsoft.ACE.OLEDB.12.0"提供程序未在本地计算机上注册.
我不知道如何解决这个问题.我的操作系统是Windows 7.
Var*_*ant 496
好吧,你需要安装它.您正在寻找:
rsb*_*rro 146
可以使用64位版本的"Microsoft Access数据库引擎2010可再发行组件"来使用"Microsoft.ACE.OLEDB.12.0"提供程序:http:
//www.microsoft.com/en-us/下载/ details.aspx?ID = 13255
如果你使用从接受的答案中下载,你将需要为x86构建,正如@ backtestbroker.com所指出的那样.
Ber*_*ard 65
取决于应用程序(32/64位)使用您可以安装的连接
摘要:
使用32和64位shell中的powershell-command检查提供程序:
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
Run Code Online (Sandbox Code Playgroud)您将看到您的系统可以使用哪个提供商
长话故事:可以在http://live.sysinternals.com/strings.exe中找到字符串
例如.在安装了32位驱动程序的64位系统上
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"
Run Code Online (Sandbox Code Playgroud)
即使在即将到来的2016年办公室
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL
Run Code Online (Sandbox Code Playgroud)
你会找到字符串
Microsoft.ACE.OLEDB
Microsoft.ACE.Oledb.12.0
Office 2013还带有csi.dll
c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll
Run Code Online (Sandbox Code Playgroud)
其中包含" Microsoft.ACE.OLEDB.15.0 "
和Office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll
Run Code Online (Sandbox Code Playgroud)
它有" Microsoft.ACE.OLEDB.16.0 "版本
Mer*_*avi 39
您需要检查的第一件事是您的应用程序的构建配置.
如果您已在x86平台下构建项目,那么为了解决您的问题,您应该在您的计算机上安装以下软件包:
要使用"Microsoft.ACE.OLEDB.12.0"提供程序,必须首先 安装Microsoft Access数据库引擎2010 Redistributable ,此安装位于:http: //www.microsoft.com/download/en/details.aspx ?id = 13255.
安装完成后,尝试运行您的应用程序,如果这样可以解决问题,如果没有,请继续执行第2步.
下一步是一个无法解释的解决方法,适用于Office 2010,即使它是Office 2007的数据连接组件.我不太确定为什么这样可行,但确实如此,并且已经证明这几乎适用于所有情况.您需要安装2007 Office System驱动程序:数据连接组件,此安装位于:http: //www.microsoft.com/download/en/confirmation.aspx?id = 233734.
安装完成后,尝试运行您的应用程序,这应该可以解决问题.
如果您尝试运行在x64或AnyCPU平台下构建的应用程序,我建议首先验证它是否在x86平台下按预期运行.如果它不在该x86平台下运行,请执行第一部分中的步骤并验证它是否按预期运行.
我确实读到包括OLEDB数据库驱动程序在内的MS Access驱动程序仅在x86平台下运行,并且在x64或AnyCPU平台下不兼容.但这似乎是不真实的.我验证了我的应用程序在构建x86时运行,然后我使用被动标志安装了Access数据库引擎.
完成这两个步骤后,我设法在构建x64或AnyCPU构建配置后运行我的应用程序.这似乎解决了我的问题.
注意:步骤的顺序似乎有所不同,因此请遵循相应的步骤.
小智 32
当我在Configuration Manager对话框中将构建从"x86"更改为"Any CPU"时,我在Visual Studio 2010中收到此错误/异常.我理解的这个OLEDB数据库驱动程序仅适用于x86,不兼容64位.将构建配置更改回x86解决了我的问题.
Axi*_*ili 16
如果你使用的是64位但是在安装AccessDatabaseEngine之后仍然有问题,请看这篇文章,它解决了我的问题.
即您需要安装此 AccessDatabaseEngine
Tec*_*pud 15
对于那些仍然受此影响的人.
我一直在收到错误......
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
Run Code Online (Sandbox Code Playgroud)
......正如OP,Shailesh Sahu所描述的那样.
我有64位Windows 7.
我的问题是在PowerShell脚本中,但使用的是连接字符串,类似于OP的帖子,所以希望我的发现可以应用于C#,PowerShell和依赖于"Microsoft.ACE.OLEDB"驱动程序的任何其他语言.
我按照MS论坛帖子的说明进行了操作:http://goo.gl/h73RmI
我首先尝试安装64位版本,然后从此页面安装32位版本的AccessDatabaseEngine.exe http://www.microsoft.com/en-us/download/details.aspx?id=13255
但仍然没有快乐.
然后我在PowerShell中运行下面的代码(来自SQL Panda的网站http://goo.gl/A3Hu96)
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
Run Code Online (Sandbox Code Playgroud)
...这给了我这个结果(我为了简洁而删除了其他数据源)......
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
Run Code Online (Sandbox Code Playgroud)
如您所见,我有Microsoft.ACE.OLEDB.15 .0(十五)不是Microsoft.ACE.OLEDB.12 .0(十二)
所以,我将连接字符串修改为15并且它有效.
那么,一个快速的PowerShell片段来演示如何对版本进行软编码......
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
Run Code Online (Sandbox Code Playgroud)
修改以选择最新的ACE版本,如果不止一个
希望找到这个的人现在可以查看安装的OLEDB版本并使用适当的版本号.
小智 8
尽管给出了许多答案,但我所遇到的问题尚未提及。
从MS下载的32位安装程序AccessDatabaseEngine.exe的安装 报告成功,但未安装,已通过此处上面发布内容之一的Powershell脚本进行了验证。
64位安装程序AccessDatabaseEngine_X64.exe的安装报告了令人震惊的错误消息:
很简单的解决方案已经被发现这里在使用Autodesk的网站。只需将参数/ passive添加到命令行字符串,如下所示:
AccessDatabaseEngine_X64.exe /被动
安装成功,OleDb驱动程序正常工作。
我使用OleDb处理的Excel文件是xlsx类型,由EPPlus 4.5生成并由Excel 2007修改。
小智 7
此处提供了 64 位版本的“Microsoft Access Database Engine 2010 Redistributable”,允许您使用“Microsoft.ACE.OLEDB.12.0”提供程序: http: //www.microsoft.com/en-us/下载/details.aspx?id=13255
如果使用 VS 2012 或更高版本,请确保在项目的属性 => 构建 => 常规配置中取消选中“首选 32 位”复选框

小智 6
如果安装的“ AccessDatabaseEngine”仍然无法解决问题,请使用以下解决方案:
您需要将Active Solution Platform从“任何CPU”更改为“ x86”。
从CodeProject.com
小智 6
如果要调试Web项目,只需确保IIS Express以32位或64位运行,具体取决于您的项目设置。
去
工具>选项>项目和解决方案> Web项目
然后从中检查(或取消选中)“使用IIS Express的64位版本...”
小智 5
syp_恐龙,
正如您针对“Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册”错误所建议的那样,对我来说,解决方案是将活动解决方案平台从“任何CPU”更改为“x86”。
当我执行这些步骤、重建解决方案、获取 EXE 并将其放置在网络上时,一切都在 Windows 7 64 位计算机上顺利运行。
小智 5
我可以按照本文中的步骤解决此问题:http : //www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-在本地机器上
对我而言,关键点是:
使用IIS进行调试时,
默认情况下,Visual Studio使用32位版本。您可以在Visual Studio中通过转到工具»选项»项目和解决方案»Web项目»常规来更改此设置,然后选择
“将IIS Express的64位版本用于网站和项目”
在检查了该选项之后,然后将项目的平台目标设置回“ Any CPU”(在故障排除过程中的某个位置将其设置为x86),便能够克服该错误。
小智 5
首先验证您的系统中安装了哪个版本的 microsoft.ace.oledb.12.0。
检查以下路径 C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --64 位已安装
检查以下路径 C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --x86 位已安装
如果安装了 (x86),则使用配置管理器将解决方案平台更改为 x86,将 x64 更改为 x64。
如果不可用,请使用以下链接安装
https://www.microsoft.com/en-us/download/details.aspx?id=23734
做这两个步骤:
var fileName = string.Format("{0}", openFileDialog1.FileName);
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, TableNmae);
DataTable data = ds.Tables[TableNmae];
dg1.DataSource = data;
Run Code Online (Sandbox Code Playgroud)
这些配置于 2020 年 1 月在我的新机器上运行:
(仅限 1 - x64)Windows 10 x64、Office 365 x64、使用 /passive 参数安装的 AccessDatabaseEngine_x64 2016、VStudio 构建设置显式设置为 x64,并使用以下连接字符串:Provider= Microsoft.ACE.OLEDB.16.0; 数据源=D:...\MyDatabase.accdb
(2 - x64 或 x32)Windows 10 x64、Office 365 x64、使用 /passive 参数安装的 AccessDatabaseEngine_x64 2016、使用 /passive 参数安装的 PLUS AccessDatabaseEngine 2010(32 位)、VStudio 构建设置设置为 AnyCPU,并使用以下连接字符串:Provider=微软.ACE.OLEDB.16.0; 数据源=D:...\MyDatabase.accdb
(仅限 3 - x32)Windows 10 x64、Office 365 x32、使用 /passive 参数安装的 AccessDatabaseEngine 2010(32 位)、VStudio 构建设置设置为 x86,并使用以下连接字符串:Provider= Microsoft.ACE.OLEDB.12.0;数据源=D:...\MyDatabase.accdb
失败注释
在连接字符串中使用 ACE.OLEDB.12.0 x64 提供程序失败,仅按照上面 (1) 中的方式安装了 AccessDatabaseEngine_x64 2016。
在 Visual Studio 构建设置中使用 AnyCPU 在 (1) 中失败。需要设置 x64。也许这是因为 AnyCPU 意味着 Vstudio 必须在编译时看到 x32 ACE.OLEDB.nn.0 提供程序。
当 ACE.OLEDB.12.0 2016 x32 /passive 引擎看到 x64 应用程序时,它不会安装。(ACE.OLEDB.12.0 2010 x32 /passive 安装程序有效。)
结论
要使用 x64 构建设置,您需要拥有2016 x64 数据库引擎和ACE.OLEDB.16.0连接字符串提供程序以及显式 x64 构建设置才能与 2020 年 1 月的 Office 365 配合使用。使用 /passive 选项使安装变得轻松。感谢发布该提示的人!
要使用 AnyCPU,我需要安装 ACE.OLEDB.12.0 2010 x32 引擎和 ACE.OLEDB.16.0 x64 引擎。这样,Vstudio 就可以在“AnyCPU”编译时看到 x32 和 x64 引擎。我可以将提供程序连接字符串更改为 ACE.OLEDB.12.0(用于 x32 操作)或 ACE.OLEDB.16.0(用于 x64 操作)。两者都工作得很好。
要使用 x86 生成设置,您需要拥有2010 x32 数据库引擎和ACE.OLEDB.12.0连接字符串提供程序以及显式 x86 生成设置,才能在 2020 年 1 月使用 Office 365 x32。
| 归档时间: |
|
| 查看次数: |
923668 次 |
| 最近记录: |