OLEDB与Excel文件操作

编程的早期,习惯于使用Interop对象来读取或写入Excel文件,但因其性能不佳,迫切需要一个更好的替代方案。OLEDB以其出色的性能成为了首选。OLEDB作为一个桥接工具,能够直接将Excel文件中的行和列导入到数据集中,无需使用Interop Excel对象打开Excel文件。

连接OLEDB

在开始读取或写入Excel文件之前,需要使用连接字符串连接到OLEDB。以下是连接字符串的示例:

if (文件扩展名是.XLS) 使用以下连接字符串 string szConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + szFilePath + @"'; Extended Properties='Excel 8.0;HDR=YES;'"; if (文件扩展名是.XLSX) 使用以下连接字符串 string szConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" + szFilePath + @"'; Extended Properties='Excel 12.0;HDR=YES;'";

在连接字符串中:

  • Provider:OLEDB提供者,例如Jet.OLEDB.4.0用于XLS文件,ACE.OLEDB.12.0用于XLSX文件。
  • Data Source:要读取的Excel文件的文件路径。
  • Extended Properties:包含Excel驱动程序版本和HDR(如果源Excel文件的第一行是标题,则为YES)。

访问Excel表格

有几种方法可以引用Excel表格:

  • 使用工作表名称:使用工作表名称引用Excel数据,需要在工作表名称后加上'$',例如Select * from [Sheet1$]。
  • 使用范围:可以使用范围来读取Excel表格。它应该具有特定的地址来读取,例如Select * from [Sheet1$B1:D10]。

以下是使用C#连接OLEDB并读取Excel表格的示例代码:

using (OleDbConnection conn = new OleDbConnection(connectionString)) { conn.Open(); OleDbDataAdapter objDA = new System.Data.OleDb.OleDbDataAdapter( "select * from [Sheet1$]", conn); DataSet excelDataSet = new DataSet(); objDA.Fill(excelDataSet); dataGridView1.DataSource = excelDataSet.Tables[0]; }

在上面的代码中,'[Sheet1$]'是带有'$'作为默认选择器的第一个工作表名称。

写入数据到Excel表格

以下是使用C#将数据写入Excel表格的示例代码:

using (OleDbConnection conn = new OleDbConnection(connectionString)) { try { conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandText = @" Insert into [Sheet1$] (month,mango,apple,orange) VALUES ('DEC','40','60','80');"; cmd.ExecuteNonQuery(); } catch (Exception ex) { // 异常处理 } finally { conn.Close(); conn.Dispose(); } }

以下是使用C#更新Excel表格中的数据的示例代码:

using (OleDbConnection conn = new OleDbConnection(connectionString)) { try { conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandText = "UPDATE [Sheet1$] SET month = 'DEC' WHERE apple = 74;"; cmd.ExecuteNonQuery(); } catch (Exception ex) { // 异常处理 } finally { conn.Close(); conn.Dispose(); } }

需要注意的是,OLEDB不支持DELETE查询。

可能遇到的问题

可能会遇到的问题包括:

  • 'Microsoft.Jet.OLEDB.4.0'提供者未在本地计算机上注册。
  • 删除链接表中的数据不受此ISAM支持。

这些问题的解决方法包括:

  • 如果是64位机器,需要将EXE编译为x86 CPU。
  • 如果是Web应用程序,则需要在应用程序池中启用'32位应用程序'。

与Interop/COM对象相比的优势

虽然可以使用ExcelInterop应用程序来完成任务,但与Interop/COM对象相比,OLEDB有以下优势:

  • Interop对象是重量级且未管理的对象。
  • 如果将此代码作为Web应用程序在IIS中运行,则需要特殊的权限来启动组件服务。
  • 使用OLEDB读取/写入Excel时,不需要Excel安装。
  • OLEDB的性能比Interop对象更快,因为不会创建Excel对象。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485