发布时间:2018-10-17编辑:佚名阅读(2435)
使用OleDbConnection对象创建一个到Excel的连接。
1、首先,了解一下创建连接时,字符串中的对应参数的含义:
using System.Data; using System.Data.OleDb; String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; OleDbConnection OleConn = new OleDbConnection(strConn); OleConn.Open();
参数解析:
参数HDR的值:
HDR=Yes,这代表第一行是标题,不做为数据使用;如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES。
参数Excel 8.0对于Excel 97以上版本都用Excel 8.0 IMEX ( IMport EXport mode )设置
IMEX 参数:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
意义如下 0 ---输出模式; 1---输入模式; 2----链接模式(完全更新能力)
2、下面开始解决问题:在sql语句中,如果写法不当,就可能无法实现想要的查询结果(DataSet),出现“至少有一个参数没有被指定值”。
String sql = "SELECT * FROM [Sheet1$] where F1=7;"; OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); DataSet OleDsExcel = new DataSet(); OleDaExcel.Fill(OleDsExcel, "Sheet1"); OleConn.Close();
注意连接中的:Extended Properties='Excel 8.0;HDR=Yes;的写法
如果写成 Extended Properties='Excel 8.0;HDR=Yes;' 即第一行作为列标题,可以指定字段名 例如 String sql = "SELECT * FROM [Sheet1$] where Order=7;";
如果写成 Extended Properties='Excel 8.0;HDR=No;' 则只能指定F1,F2作为字段名 例如 String sql = "SELECT * FROM [Sheet1$] where F1=7;"
注意:
(1)是否在连接中将第一行设置为列标题;
(2)还有对应列的数据类型要一致,如果不一致也有可能导致查询结果出错。(尤其是在第一行不是列标题的时候)
0人
0人
0人
0人