在编程的早期,习惯于使用Interop对象来读取或写入Excel文件,但因其性能不佳,迫切需要一个更好的替代方案。OLEDB以其出色的性能成为了首选。OLEDB作为一个桥接工具,能够直接将Excel文件中的行和列导入到数据集中,无需使用Interop Excel对象打开Excel文件。
在开始读取或写入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;'";
在连接字符串中:
有几种方法可以引用Excel表格:
以下是使用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$]'是带有'$'作为默认选择器的第一个工作表名称。
以下是使用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查询。
可能会遇到的问题包括:
这些问题的解决方法包括:
虽然可以使用ExcelInterop应用程序来完成任务,但与Interop/COM对象相比,OLEDB有以下优势: