530

我正在尝试从按钮单击事件的 Excel 文件中获取数据。我的连接字符串是:

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";

当我单击按钮时,出现以下错误:

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册。

我不知道如何解决这个问题。我的操作系统是 Windows 7。

4

38 回答 38

623

嗯,你需要安装它。您正在寻找:

于 2011-07-11T11:28:15.470 回答
182

64 位版本的“Microsoft Access Database Engine 2010 Redistributable”允许您使用“Microsoft.ACE.OLEDB.12.0”提供程序,可在此处获得:http:
//www.microsoft.com/en-us/下载/details.aspx?id=13255

如@backtestbroker.com 所指出的,如果您使用已接受答案的下载,则需要为x86 构建。

于 2013-02-22T19:53:33.983 回答
101

取决于使用您可以安装的连接的应用程序(32/64 位)

概括:

  • 2007-2016 年的所有办公室都包含提供程序“Microsoft.ACE.Oledb.12.0”
  • 根据您的应用程序架构选择合适的运行时引擎 (32/64) 6
  • 使用32 位和 64 位 shell的 powershell-command 检查您的提供程序:

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
    
  • 你会看到你的系统可以使用哪个提供者

长话短说:可以通过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"

即使在即将到来的 Office 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

你会发现字符串

  • 微软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

其中包含“ 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

具有“ Microsoft.ACE.OLEDB.16.0 ”版本

于 2015-08-27T10:41:50.617 回答
55

您需要检查的第一件事是您的应用程序的构建配置。

  • 如果您已经在 x86 平台下构建了项目,那么为了解决您的问题,您应该在您的机器上安装以下软件包:

    1. 要使用“Microsoft.ACE.OLEDB.12.0”提供程序,您必须先 安装 Microsoft Access Database Engine 2010 Redistributable ,此安装可在以下网址获得:http: //www.microsoft.com/download/en/details.aspx ?id=13255

      安装完成后,尝试运行您的应用程序,如果这很好地解决了问题,如果没有,请继续执行步骤 2。

    2. 下一步是一个无法解释的解决方法,它适用于 Office 2010,即使它是 Office 2007 的数据连接组件。我不太确定为什么会这样,但它确实有效,并且已被证明在几乎所有情况下都有效。您需要安装 2007 Office System 驱动程序:数据连接组件,此安装位于:http: //www.microsoft.com/download/en/confirmation.aspx?id=23734

      安装完成后,尝试运行您的应用程序,这应该可以解决问题。

  • 如果您尝试运行在 x64 或 AnyCPU 平台下构建的应用程序,我建议您首先验证它在 x86 平台下是否按预期运行。如果它不在该 x86 平台下运行,请执行第一部分中的步骤并验证它是否按预期运行。

    我确实读到了包括 OLEDB 数据库驱动程序在内的 MS Access 驱动程序只能在 x86 平台下工作,并且在 x64 或 AnyCPU 平台下不兼容。但这似乎是不真实的。我在构建 x86 时验证了我的应用程序正在运行,然后我使用被动标志安装了 Access 数据库引擎。

    1. 首先在本地下载文件你可以在这里下载安装:http: //www.microsoft.com/en-us/download/details.aspx?id=13255
    2. 使用带有“/被动”标志的命令提示符进行安装。 在命令提示符下运行以下命令:'AccessDatabaseEngine_x64.exe /passive'

    在这两个步骤之后,我设法在 x64 或 AnyCPU 构建配置中运行我的应用程序。这似乎解决了我的问题。

注意:步骤的顺序似乎有所不同,因此请遵循。

于 2015-09-24T11:29:37.043 回答
35

当我将配置管理器对话框中的构建从“x86”更改为“任何 CPU”时,我在 Visual Studio 2010 中收到此错误/异常。我理解的这个 OLEDB 数据库驱动程序仅适用于 x86,并且不兼容 64 位。将构建配置改回 x86 为我解决了这个问题。

于 2013-02-15T19:42:27.903 回答
31

我安装了 MS 驱动程序,但它仍然不适合我。然后我发现这篇博客文章解决了这个问题。在那里阅读,否则使用这两个图像(从该帖子链接)作为 TLDR 摘要:

在此处输入图像描述

在此处输入图像描述

于 2015-09-09T10:56:48.897 回答
21

虽然已经给出了很多答案,但我遇到的问题还没有提到。

  • 我的场景: 64位应用程序,Win10-64,Office 2007 32位安装。
  • 从 MS 下载的 32 位安装程序 AccessDatabaseEngine.exe的安装报告成功,但未安装,已通过上述帖子之一的 Powershell 脚本验证。

  • 安装 64 位安装程序AccessDatabaseEngine_X64.exe报告了令人震惊的错误消息:

在此处输入图像描述

在 Autodesk 站点上找到非常简单的解决方案。只需将参数 /passive 添加到命令行字符串,如下所示:

AccessDatabaseEngine_X64.exe /被动

安装成功,OleDb 驱动工作。

我使用 OleDb 处理的 Excel 文件是 xlsx 类型,使用 EPPlus 4.5 生成并使用 Excel 2007 修改。

于 2019-05-11T23:27:21.857 回答
17

对于所有仍然受此影响的人。

我一直收到错误...

OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."

...如 OP 所描述的,Shailesh Sahu。

我有 64 位 Windows 7。

我的问题在PowerShell脚本中,但使用的是连接字符串,类似于 OP 的帖子,所以希望我的发现可以应用于 C#、PowerShell 和任何其他依赖“Microsoft.ACE.OLEDB”驱动程序的语言。

我按照这个 MS 论坛主题的说明进行操作:http: //goo.gl/h73RmI

我首先尝试安装64 位版本,然后从该页面http://www.microsoft.com/en-us/download/details.aspx?id=13255安装32 位版本的 AccessDatabaseEngine.exe

但仍然没有喜悦。

然后我在PowerShell中运行下面的代码(来自 SQL Panda 的网站http://goo.gl/A3Hu96

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 

...这给了我这个结果(为简洁起见,我删除了其他数据源)...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider

如您所见,我有 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`";"

修改为选择最新的 ACE 版本,如果超过一个

希望发现此问题的任何人现在都可以检查安装的 OLEDB 版本并使用适当的版本号。

于 2014-01-30T11:48:28.500 回答
16

如果您使用的是 64 位,但即使在安装 AccessDatabaseEngine 后仍然存在问题,请参阅这篇文章,它为我解决了问题。

即你需要安装这个AccessDatabaseEngine

于 2013-04-13T06:25:41.153 回答
15

您需要根据办公室安装的位数将解决方案平台从“Any CPU”更改为“x86”或“x64”。

步骤如下:

  1. 在解决方案资源管理器中右键单击解决方案文件: 在此处输入图像描述

    1. 单击配置管理器。
    2. 单击 Active Platform 下拉菜单,如果 x86 已经存在,则选择它,否则单击 New。 在此处输入图像描述

    3. 从新平台下拉列表中选择 x86 或 x64: 在此处输入图像描述

编译并运行您的应用程序。

于 2016-02-19T07:35:06.340 回答
7

我可以按照本文中的步骤解决此问题:http: //www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-在本地机器上

对我来说,关键点是:

使用 IIS 进行调试时,

默认情况下,Visual Studio 使用 32 位版本。您可以在 Visual Studio 中更改此设置,方法是转到工具 » 选项 » 项目和解决方案 » Web 项目 » 常规,然后选择

“为网站和项目使用 64 位版本的 IIS Express”

检查该选项后,然后将我的项目的平台目标设置回“任何 CPU”(我在故障排除过程中的某处将其设置为 x86),我能够克服该错误。

于 2015-11-30T18:51:00.667 回答
7

如果您正在调试 Web 项目,只需确保IIS Express以 32 位或 64 位运行,具体取决于您的项目设置。

工具 > 选项 > 项目和解决方案 > Web 项目

并从那里检查(或取消选中)“使用​​ 64 位版本的 IIS Express...”

于 2016-07-13T05:23:23.810 回答
6

如果安装的“AccessDatabaseEngine”仍然没有帮助,下面是解决方案:

您需要将 Active Solution Platform 从“Any CPU”更改为“x86”。

OLEDB 提供程序未在本地计算机上注册

来自 CodeProject.com

于 2013-06-24T14:05:57.360 回答
6

执行此 2 个步骤:

  1. 在这个菜单中:项目 -> yourproject properties... -> Build :取消选中“prefer 32-Bit”
  2. 在 connectionString 中:在扩展属性之前和之后写 cuotes,如下所示:Extended Properties='Excel 12.0 Xml;HDR=YES'
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;
于 2019-03-21T05:08:28.960 回答
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

于 2017-12-20T07:55:19.470 回答
4

syp_dino,

正如您为“Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册”错误建议的我的解决方案是将 Active Solution Platform 从“Any CPU”更改为“x86”。

当我执行这些步骤、重建解决方案、获取 EXE 并放入网络时,一切都在 Windows 7 64 位机器上运行顺利。

于 2014-06-26T14:20:03.170 回答
4

我遇到了同样的问题。转到解决方案属性并将任何 CPU 更改为 x86,我认为它会完成这项工作。

于 2018-07-20T18:22:35.237 回答
4

这些配置于 2020 年 1 月在我的新机器版本上运行:

(仅限 1 - x64)Windows 10 x64、Office 365 x64、AccessDatabaseEngine_x64 2016 安装了 /passive 参数,VStudio 构建设置显式设置为 x64,连接字符串如下:Provider= Microsoft.ACE.OLEDB.16.0; 数据源=D:...\MyDatabase.accdb

(2 - x64 或 x32)Windows 10 x64、Office 365 x64、AccessDatabaseEngine_x64 2016 安装了 /passive 参数、PLUS AccessDatabaseEngine 2010(32 位)安装了 /passive 参数、VStudio 构建设置设置为 AnyCPU,具有以下连接字符串:Provider=微软.ACE.OLEDB.16.0;数据源=D:...\MyDatabase.accdb

(仅限 3 - x32)Windows 10 x64、Office 365 x32、AccessDatabaseEngine 2010(32 位)安装了 /passive 参数,VStudio 构建设置设置为 x86,具有以下连接字符串:Provider= Microsoft.ACE.OLEDB.12.0;数据源=D:...\MyDatabase.accdb

故障记录

在连接字符串中使用 ACE.OLEDB.12.0 x64 提供程序失败,仅在 (1) 中安装了 AccessDatabaseEngine_x64 2016。

在 (1) 中,在 Visual Studio 构建设置中使用 AnyCPU 失败。需要设置 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。

于 2020-01-18T01:57:41.397 回答
3

尝试使用 SSMS 2014 将数据从 excel 文件 (xlsx) 导入 SQL Server 数据库时遇到此问题。

2007 Office System Driver: Data Connectivity Components install 为我解决了问题。

于 2017-04-12T06:54:20.537 回答
2

当我们阅读 Excel 文件时,我遇到了类似的问题。

问题历史:

由于内存需求,我们最近将应用程序从 32 位迁移到 64 位。为此,我们将 Windows 7 从 32 位迁移到 64 位。但是我们仍然在我们的机器上安装了 32 位的 office。

因为,我们在将 Excel 数据导入应用程序时遇到了这个问题。

解决方案,

我下载了 64 位版本的http://www.microsoft.com/en-us/download/details.aspx?id=13255并安装了参数为,

AccessDatabaseEngine_x64.exe /被动

没有任何代码更改我的问题得到解决。

笔记:

在 64 位操作系统和 64 位办公室上,如果没有此修复,我的功能可以正常工作。仅当我们的应用程序在 64 位操作系统上运行 64 位且安装了 32 位办公室时,才需要此修复程序。

于 2015-02-13T09:11:48.840 回答
2

只需下载并安装以下 Access DB 引擎(X86 或 X64:根据您的机器配置)并查看魔法:)

https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255

于 2017-04-07T10:31:56.040 回答
2

将数据从 Excel 文件导入 MS-SQL 时收到此错误。提供程序已经安装(64 位),这让我很惊讶为什么它不起作用。所以我所做的只是找到这里使用的导入/导出应用程序,即.EXE。我发现它在

C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe

然后我直接运行 .exe 来执行数据导入。它奏效了!

于 2017-09-12T08:36:06.423 回答
2

64 位版本的“Microsoft Access Database Engine 2010 Redistributable”允许您使用“Microsoft.ACE.OLEDB.12.0”提供程序,可在此处获得:http: //www.microsoft.com/en-us/下载/details.aspx?id=13255

如果使用 VS 2012 或更高版本,请确保在项目的 Properties => Build => General configuration 中未选中“Prefer 32-bit”复选框 在此处输入图像描述

于 2021-08-27T05:01:23.247 回答
1

我遵循了其他人的指示;安装此补丁、安装该补丁以及 Microsoft Access Database Engine 2010。

我的问题是我在机器上的 2 个站点中使用相同的库(linq2sql);1个有效,1个无效。

最终我发现我必须在我的非工作站点的应用程序池的高级设置中“启用 32 位应用程序”。

现在一切正常。

于 2014-08-07T01:48:59.737 回答
1

也可以试试这些步骤

在 SQL Server 中, 1.打开一个数据库 2.Clic 在选项'Server Obtect' 3.Clic 在'Linked Servers' 4.Clic 在'Providers' 5.Clic Rigth 在'Microsoft.ACE.OLEDB.12.0' 6.取消选中所有选项并关闭

于 2015-03-18T19:35:42.790 回答
1

1.) 使用ConnectionStrings.com验证您的连接字符串。

2.) 确保您安装了正确的数据库引擎。这是帮助我的两个数据库引擎。

Microsoft Access 数据库引擎 2010 可再发行组件

2007 Office System 驱动程序:数据连接组件

3.) 您的构建目标平台可能是“任何 CPU”,它可能需要是“X86”(属性、构建、平台目标)。

于 2015-05-19T16:08:50.730 回答
1

请记住在服务器上为 Web 应用程序安装AccessDatabaseEngine 。

于 2015-08-30T05:15:41.973 回答
1

我遇到了同样的问题,但在这种情况下,microsoft-ace-oledb-12-0-provider已经安装在我的机器上,并且可以正常用于其他开发的应用程序。

这些应用程序与我遇到问题的应用程序之间的区别在于旧应用程序在“本地 IIS ”上运行,而有错误的应用程序在“ IIS Express(从 Visual Studio 运行”)上运行。所以我所做的是——

  1. 右键单击项目名称。
  2. 转到属性
  3. 转到右侧的 Web 选项卡。
  4. 在服务器下选择本地 IIS,然后单击创建虚拟目录按钮。
  5. 再次运行该应用程序,它工作。
于 2015-10-23T06:48:05.993 回答
1

我的机器上已经安装了Microsoft Access Database Engine 2010 Redistributable,但仍然收到Microsoft ACE OLEDB Provider错误。

然后我想起我最近升级到了 Office 2016,所以,我应该尝试重新安装Microsoft Access Database Engine 2010 Redistributable。这解决了我机器上的问题。

因此,如果您已升级到不同版本的 MS Office,甚至修复/重新安装了您的 MS Office,请尝试重新安装Microsoft Access Database Engine 2010 Redistributable ,然后再浪费时间寻找其他修复程序。祝你好运!

于 2016-04-18T18:39:14.870 回答
1

如果您在尝试从 ASP.NET 应用程序使用 ACE 时收到此错误,最可能的原因是您安装了任一 32 位版本。默认情况下,64 位操作系统上的 IIS 将在 64 位工作进程中运行应用程序。64 位进程无法加载 32 位 DLL。当调用 ACE 提供程序时,64 位进程将尝试定位 64 位 DLL。如果它不存在,您会收到将您带到这里的错误消息。

在这种情况下,您有两个选择。首先,可以安装2010 64位版本。如果您安装了 2007 32 位版本,您可以简单地安装 2010 64 位版本。如果您安装了 2010 的 32 位版本,则需要将其卸载并下载并安装 64 位 2010 版本。您不能同时安装 2010 提供程序的 32 位和 64 位版本。如果您在开发机器上执行安装,您可能还会受到任何现有 Office 安装的位数的限制。

第二个选项是更改 IIS 中的应用程序池以启用 32 位应用程序。如果您使用的是完整版的 IIS,您可以使用管理工具来执行此操作(控制面板 » 管理工具 » Internet 信息服务 (IIS) 管理器)。

更多了解请参考以下链接

于 2017-05-09T07:40:01.180 回答
1

我曾多次尝试卸载然后安装“Microsoft Access Database Engine 2010(英文)”,最后是评论 - “将选项从 ANY CPU 更改为 x86”,它工作正常。

感谢您的评论 - 经过两周的挫折,我现在重新开始工作。

于 2021-02-14T20:28:26.453 回答
0

这取决于您安装的办公室,如果您有 x64 位办公室,那么您必须将应用程序编译为 x64 以允许它运行,所以如果您希望它在 x36 上运行,那么您必须安装 office x86 才能接受,我试过了上面的所有解决方案,但没有一个有效,直到我意识到我有 Office x64bit,所以我将应用程序构建为 x64 并工作

于 2015-04-12T18:11:00.440 回答
0
  • 几天来我一直面临同样的问题。我确实安装了 64 位的 OLEDB 驱动程序,也尝试了 32 位的驱动程序,这些都可以在微软网站上找到。
  • 我尝试重新安装office 64位版本,但不知何故它不起作用。尝试在 IIS 池中允许 32 位应用程序为真。
  • 尝试将项目环境更改为 X86、AnyMachine、Mixed。并且几乎尝试了我在互联网上可以找到的所有补丁。但是所有的解决方案都让我失望了。
  • 虽然我终于知道我们正在下载的提供程序是最新的并且也没有使用它。
  • 我卸载了它并安装了 oledb 驱动程序 14.0.7015.1000。我没有它的链接,因为我是从公司资源中获得的,你可能需要用谷歌搜索它,但它可以工作。我来到了微软的这个下载链接,它也可以工作......但是它是14.0.6119.5000版本,但它可以工作。
于 2016-01-05T10:32:51.980 回答
0

我在不同计算机上解决它的方式:

我有一台装有 Visual Studio 2012 的 Windows 7 32 位机器,它没有 Access 数据库,因为我没有 Office 2010。我复制了我在 Windows 7 64 位机器上的相同源。

因此,在按照其他人的上述建议下载后,我将 AccessDatabaseEngine 安装到这台 Windows 7 32 位机器中,一切正常。

我的 Windows 7 64 位机器上仍然存在问题,该机器已经安装了 Office 2010,其中已经包含 Access 2010。我在这台计算机上解决的方法是进入项目,选择属性,并在平台目标有任何 CPU 我检查了 Prefer 32 位。重新编译/构建并且 Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册消息消失了。

于 2017-11-02T00:07:29.073 回答
0

这现在对我有用。

  1. 访问此页面,然后为您的计算机下载相应的软件包(AccessDatabaseEngine.exeAccessDatabaseEngine_X64.exe
  2. 安装那个。
  3. 享受...您的代码正在运行...

但是对于您的应用程序包,您可以使用以下任何解决方案:

  1. 进入C:\Program Files (x86)\Common Files\microsoft sharedC:\Program Files\Common Files\Microsoft SharedOFFICE14目录放在包文件的相同位置。

或者

  1. 将两个项目(在 item1 中)附加到您的安装包中。
于 2018-06-27T10:05:50.840 回答
0

只需从 Nuget 包管理器添加 CsvReader。它既快速又简单,并且没有像这样进行任何连接的麻烦。只需使用 nuget 包管理器搜索并导入库:-

using LumenWorks.Framework.IO.Csv;

代码:

var csvTable = new DataTable();   
using (var csvReader = new CsvReader(new         
StreamReader(System.IO.File.OpenRead(filePath)), true))   
{   
   csvTable.Load(csvReader);   
   string Column1 = csvTable.Columns[0].ToString(); //Read columns    
}
于 2021-06-16T10:50:08.880 回答
0

就我而言,我没有意识到我的连接字符串中有一个实际上很重要的错字。请注意,.0提供程序末尾的 是必需的:

所以这是正确的:

PROVIDER=Microsoft.ACE.OLEDB.16.0;

这是不正确的:

PROVIDER=Microsoft.ACE.OLEDB.16;

于 2021-11-04T20:17:43.093 回答
-9

//读取.xls文件

string strConnection = "";<br/>

string FileName = Server.MapPath("Student.xls");

strConnection = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0; HDR=Yes;IMEX=1;'";<br/>

try
{
    OleDbConnection conn1 = new OleDbConnection(strConnection);
    conn1.Open();
    DataTable dt = new DataTable();
    dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });

    Object sheetName = dt.Rows[0]["TABLE_NAME"];
    dt.Clear();
    dt.Columns.Clear();
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
    da.TableMappings.Add("Table", "0");
    da.Fill(dt);

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string ID = dt.Rows[i][0].ToString();
        string Name = dt.Rows[i][1].ToString();
        string City = dt.Rows[i][2].ToString();
        string Marks = dt.Rows[i][3].ToString();
    }
    conn1.Close();
}
catch
{
    throw;
}
//To Read xlsx file use following code
string strConnection = "";  <br/>
string FileName = Server.MapPath("Student.xlsx"); <br/>
strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0 Xml;HDR={1};IMEX=1;'";<br/>

try
{
    OleDbConnection conn1 = new OleDbConnection(strConnection);
    conn1.Open();

    DataTable dt = new DataTable();
    dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });

    Object sheetName = dt.Rows[0]["TABLE_NAME"];
    dt.Clear();
    dt.Columns.Clear();
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1);
    da.TableMappings.Add("Table", "0");
    da.Fill(dt);
    //int idx=0;
    //int j=0;
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string ID = dt.Rows[i][0].ToString();
        string Name = dt.Rows[i][1].ToString();
        string City = dt.Rows[i][2].ToString();
        string Marks = dt.Rows[i][3].ToString();
    }

    conn1.Close();
}
catch
{
    throw;
}

// 现在从“ http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734 ”链接安装 AccessDatabaseEngine.exe

它将工作 100%

于 2013-04-30T06:59:21.563 回答