由于工作需要,需要将数据库中的表填充到Excel中,我本人是相当不喜欢任何类型的手动输入输出,或表格计算的导入导出,但是事情还是要做的。
通过ADO.NET的DbProviderFactory可以轻松的读取或写入Excel的Spreadsheet,和平时操作数据库表类似。
首先是我引用了平时用的一个Excel文件 “ZYDM.xls”,这里我的第一行使用的两列名称类似于数据库的字段名称,这一行很重要,在后面你可以看到其存在的必要性;另外我并没有用
Excel默认的Sheet1,而是我重命名后的ZYDM
其次就是确定连接字符串
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Projects\CSDemo1_Reading and Writing Excel\ReadingAndWriteExcel\Cities.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
“E:\Projects\CSDemo1_Reading and Writing Excel\ReadingAndWriteExcel\ZYDM.xls” 是我的Excel文件的路径,这里可以把它替换成你的文件的路径
一旦链接字符串确定后,其余的操作于对一般的数据操作几乎没什么差别。
1.下面是DataSet存储读取到的Excel内容,并绑定到WindowsForm下的DataGridView控件中
代码如下
//button1-在GridView中显示Excel中的内容
private void button1_Click(object sender, EventArgs e)
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Projects\CSDemo1_Reading and Writing Excel\ReadingAndWriteExcel\ZYDM.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
DbDataAdapter adapter = factory.CreateDataAdapter();
DbCommand selectCommand = factory.CreateCommand();
selectCommand.CommandText = "SELECT ZYDM,ZYDMNAME FROM [ZYDM$]";
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
selectCommand.Connection = connection;
adapter.SelectCommand = selectCommand;
DataSet cities = new DataSet();
adapter.Fill(ZYDM);
gvEX1.DataSource = ZYDM.Tables[0];
}
效果如下:
下面是在Excel中插入所需要的一行数据
private void 插入Excel_Click(object sender, EventArgs e)
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Projects\CSDemo1_Reading and Writing Excel\ReadingAndWriteExcel\Cities.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
///获取Excel其中一行
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = "INSERT INTO [ZYDM$] (ZYDM,ZYDMNAME) VALUES(\"00\",\"插入成功了 哈哈!\")";
connection.Open();
command.ExecuteNonQuery();
}
}
}
效果如下
很COOL是吧,除了查询、插入,当然你还可以定义更新、删除以及更复杂的操作。。
PS: