如何使用ADO.NET Excel读取文件

小编给大家分享一下如何使用ADO.NET Excel读取文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

在关系数据库提供的各种对象中(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,它由指定工作簿中的工作表和定义的命名区域组成。命名区域被视为“表”,而工作表被视为“系统表”)这里我们将ADO.NET Excel读取也当作一个“数据库”来对待,然后利用OleDbConnection.GetOleDbSchemaTable 方法,要获取所需的架构信息,该方法获取的架构信息与ANSI SQl-92是兼容的。

注意:对于那些不熟悉 OLE DB 架构行集的人而言,它们基本上是由 ANSI SQL-92 定义的数据库构造的标准化架构。每个架构行集具有为指定构造提供定义元数据的一组列(称作 .NET 文档中的“限制列”)。这样,如果请求架构信息(例如,列的架构信息或排序规则的架构信息),则您会明确知道可以得到哪种类型的数据。如果希望了解更多信息,请访问 Appendix B:Schema Rowsets。以下是读取Excel文件内“表”定义元数据,并显示出来的的ADO.NET Excel读取程序片断:

Code// 读取Excel数据,填充DataSet// 连接字符串      string xlsPath = Server.MapPath("~/app_data/somefile.xls");  string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +                  "Extended Properties=/"Excel 8.0;HDR=No;IMEX=1/";  " + // 指定扩展属性为   Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且***行作为数据返回,且以文本方式读取                  "data source=" + xlsPath;string sql_F = "SELECT * FROM [{0}]";  OleDbConnection conn = null;OleDbDataAdapter da = null;  DataTable tblSchema = null;IList<string> tblNames = null;  // 初始化连接,并打开conn = new OleDbConnection(connStr);conn.Open();  // 获取数据源的表定义元数据                          //tblSchema = conn.GetSchema("Tables");  tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });  GridView1.DataSource = tblSchema;GridView1.DataBind();  // 关闭连接conn.Close();

接着是一段利用“架构信息”动态读取Excel内部定义的表单或者命名区域的程序片断:

Codexcel数据,填充DataSet// 连接字符串   string xlsPath = Server.MapPath("~/app_data/somefile.xls");  string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +                  "Extended Properties=/"Excel 8.0;HDR=No;IMEX=1/";  " + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且***行作为数据返回,且以文本方式读取                 "data source=" + xlsPath;string sql_F = "SELECT * FROM [{0}]";  OleDbConnection conn = null;OleDbDataAdapter da = null;DataTable tblSchema = null;  IList<string> tblNames = null;  // 初始化连接,并打开conn = new OleDbConnection(connStr);  conn.Open();// 获取数据源的表定义元数据                          //tblSchema = conn.GetSchema("Tables");  tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });  //GridView1.DataSource = tblSchema;//GridView1.DataBind();  // 关闭连接//conn.Close();  tblNames = new List<string>();  foreach (DataRow row in tblSchema.Rows)   {      tblNames.Add((string)row["TABLE_NAME"]);   // 读取表名}// 初始化适配器da = new OleDbDataAdapter();  // 准备数据,导入DataSetDataSet ds = new DataSet();  foreach (string tblName in tblNames)  {      da.SelectCommand = new OleDbCommand(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();  // more codes  // 这里我们就不需要对SELEC 语句进行“硬编码”,可以根据需要动态的构造FROM 字句的“表名”。

以上是“如何使用ADO.NET Excel读取文件”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/tech/dev/208733.html

(0)
上一篇 2021年12月7日 15:50
下一篇 2021年12月7日 15:50

相关推荐

发表回复

登录后才能评论