文章主要就ADO.NET Excel读取程序详细的分析,文章中有详细的代码和介绍,喜欢研究的朋友可以复制下来作为以后编程的资料。
咱们都知道ADO.NET联系数据库,通过具体的查询用的人仍是蛮多的,为此呢给咱们介绍介绍ADO.NET Excel读取的问题。在联系数据库供给的各种目标中(表、视图、存储进程等),Excel 数据源仅供给相当于表的目标,它由指定作业簿中的作业表和界说的命名区域组成。命名区域被视为“表”,而作业表被视为“体系表”)这儿咱们将ADO.NET Excel读取也当作一个“数据库”来对待,然后使用OleDbConnection.GetOleDbSchemaTable 办法,要获取所需的架构信息,该办法获取的架构信息与ANSI SQl-92是兼容的。
#T#留意:关于那些不熟悉 OLE DB 架构行集的人而言,它们基本上是由 ANSI SQL-92 界说的数据库结构的标准化架构。每个架构行集具有为指定结构供给界说元数据的一组列(称作 .NET 文档中的“约束列”)。这样,假如恳求架构信息(例如,列的架构信息或排序规矩的架构信息),则您会清晰知道能够得到哪种类型的数据。假如期望了解更多信息,请拜访 Appendix B:Schema Rowsets。以下是读取Excel文件内“表”界说元数据,并显现出来的的ADO.NET Excel读取程序片断:
- Code//读取Excel数据,填充DataSet//衔接字符串
- stringxlsPath=Server.MapPath("~/app_data/somefile.xls");
- stringconnStr="Provider=Microsoft.Jet.OLEDB.4.0;"+
- "ExtendedProperties=\"Excel8.0;HDR=No;IMEX=1\";
- "+//指定扩展特点为
- MicrosoftExcel8.0(97)9.0(2000)10.0(2002),而且***行作为数据回来,且以文本方法读取
- "datasource="+xlsPath;stringsql_F="SELECT*FROM[{0}]";
- OleDbConnectionconn=null;OleDbDataAdapterda=null;
- DataTabletblSchema=null;IList<string>tblNames=null;
- //初始化衔接,并翻开conn=newOleDbConnection(connStr);conn.Open();
- //获取数据源的表界说元数据
- //tblSchema=conn.GetSchema("Tables");
- tblSchema=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,newobject[]{null,null,null,"TABLE"});
- GridView1.DataSource=tblSchema;GridView1.DataBind();
- //封闭衔接conn.Close();
接着是一段使用“架构信息”动态读取Excel内部界说的表单或许命名区域的程序片断:
- Codexcel数据,填充DataSet//衔接字符串
- stringxlsPath=Server.MapPath("~/app_data/somefile.xls");
- stringconnStr="Provider=Microsoft.Jet.OLEDB.4.0;"+
- "ExtendedProperties=\"Excel8.0;HDR=No;IMEX=1\";
- "+//指定扩展特点为MicrosoftExcel8.0(97)9.0(2000)10.0(2002),而且***行作为数据回来,且以文本方法读取
- "datasource="+xlsPath;stringsql_F="SELECT*FROM[{0}]";
- OleDbConnectionconn=null;OleDbDataAdapterda=null;DataTabletblSchema=null;
- IList<string>tblNames=null;
- //初始化衔接,并翻开conn=newOleDbConnection(connStr);
- conn.Open();//获取数据源的表界说元数据
- //tblSchema=conn.GetSchema("Tables");
- tblSchema=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,newobject[]{null,null,null,"TABLE"});
- //GridView1.DataSource=tblSchema;//GridView1.DataBind();
- //封闭衔接//conn.Close();
- tblNames=newList<string>();
- foreach(DataRowrowintblSchema.Rows)
- {
- tblNames.Add((string)row["TABLE_NAME"]);
- //读取表名}//初始化适配器da=newOleDbDataAdapter();
- //预备数据,导入DataSetDataSetds=newDataSet();
- foreach(stringtblNameintblNames)
- {
- da.SelectCommand=newOleDbCommand(String.Format(sql_F,tblName),conn);
- try{
- da.Fill(ds,tblName);
- }
- catch{
- //封闭衔接
- if(conn.State==ConnectionState.Open){
- conn.Close();
- }throw;
- }
- }//封闭衔接if(conn.State==ConnectionState.Open)
- {
- conn.Close();}//对导入DataSet的每张sheet进行处理
- //这儿仅做显现GridView1.DataSource=ds.Tables[0];GridView1.DataBind();
- GridView2.DataSource=ds.Tables[1];GridView2.DataBind();
- //morecodes
- //这儿咱们就不需要对SELEC句子进行“硬编码”,能够根据需要动态的结构FROM字句的“表名”。