You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 WinForms项目中System.Data.OleDb.OleDbConnection读取Excel失败

解决建议

1. 匹配ACE驱动与项目平台位数

.NET 8项目默认以Any CPU编译,但Microsoft ACE OLEDB驱动分32位和64位版本,二者必须严格匹配:

  • 若已安装64位ACE驱动,右键项目→属性→生成→平台目标选择x64;
  • 若安装的是32位ACE驱动,平台目标选x86;
  • 未安装驱动的话,下载对应位数的Microsoft Access Database Engine 2010 Redistributable(注意:需与已安装的Office位数一致,否则会出现冲突)。

2. 修正连接字符串

.NET 环境下ACE连接字符串需更严谨,调整为:

MyConnection = New System.Data.OleDb.OleDbConnection($"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";")
  • 添加Xml后缀适配新版Excel格式;
  • HDR=YES指定第一行为表头,IMEX=1强制混合数据类型按文本读取,避免数据丢失或类型报错;
  • 注意用双引号包裹Extended Properties的内容,确保语法正确。

3. 添加OleDb依赖

.NET 8中System.Data.OleDb并非默认引用,需手动添加:
右键项目→管理NuGet程序包→搜索System.Data.OleDb并安装最新稳定版。

4. 替代方案:使用EPPlus库(推荐)

若ACE驱动兼容性问题难以解决,推荐使用更适配.NET Core/.NET 5+的EPPlus库读取Excel:

  1. 安装NuGet包:Install-Package EPPlus
  2. 示例VB代码:
Using package = New OfficeOpenXml.ExcelPackage(New FileInfo(path))
    Dim worksheet = package.Workbook.Worksheets(selectedNOD)
    ' 读取A1到I49的单元格范围
    Dim range = worksheet.Cells("A1:I49")
    ' 转换为DataTable(True表示第一行是表头)
    Dim dt = range.ToTable(True)
    ' 后续业务逻辑处理DataTable
End Using

EPPlus无需依赖ACE驱动,跨平台兼容性更强,API也更直观。

5. 捕获详细异常排查

在代码中添加异常捕获,获取具体错误信息:

Try
    MyConnection.Open()
    ' 执行数据读取逻辑
Catch ex As Exception
    MessageBox.Show(ex.ToString()) ' 查看完整错误栈,定位具体问题
Finally
    MyConnection?.Close()
End Try

常见问题包括:文件路径错误、工作表名称拼写错误、文件被其他程序占用、权限不足等。

内容的提问来源于stack exchange,提问作者MJK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:20:04