学习笔记:教你使用ADO.NET Excel读取文件
创始人
2024-06-10 14:01:33
0

大家都知道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读取程序片断:

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

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

  1. Codexcel数据,填充DataSet// 连接字符串   
  2. string xlsPath = Server.MapPath("~/app_data/somefile.xls");  
  3. string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +                  
  4. "Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";  
  5. " + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且***行作为数据返回,且以文本方式读取                 
  6. "data source=" + xlsPath;string sql_F = "SELECT * FROM [{0}]";  
  7. OleDbConnection conn = null;OleDbDataAdapter da = null;DataTable tblSchema = null;  
  8. IList tblNames = null;  
  9. // 初始化连接,并打开conn = new OleDbConnection(connStr);  
  10. conn.Open();// 获取数据源的表定义元数据                          
  11. //tblSchema = conn.GetSchema("Tables");  
  12. tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });  
  13. //GridView1.DataSource = tblSchema;//GridView1.DataBind();  
  14. // 关闭连接//conn.Close();  
  15. tblNames = new List();  
  16. foreach (DataRow row in tblSchema.Rows)   
  17. {      
  18. tblNames.Add((string)row["TABLE_NAME"]);   
  19. // 读取表名}// 初始化适配器da = new OleDbDataAdapter();  
  20. // 准备数据,导入DataSetDataSet ds = new DataSet();  
  21. foreach (string tblName in tblNames)  
  22. {      
  23. da.SelectCommand = new OleDbCommand(String.Format(sql_F, tblName), conn);     
  24. try {          
  25. da.Fill(ds, tblName);   
  26. }     
  27. catch {          
  28. // 关闭连接          
  29. if (conn.State == ConnectionState.Open) {         
  30. conn.Close();         
  31. }throw;     
  32. }  
  33. }// 关闭连接if (conn.State == ConnectionState.Open)  
  34. {   
  35. conn.Close();}// 对导入DataSet的每张sheet进行处理          
  36. // 这里仅做显示GridView1.DataSource = ds.Tables[0];GridView1.DataBind();  
  37. GridView2.DataSource = ds.Tables[1];GridView2.DataBind();  
  38. // more codes  
  39. // 这里我们就不需要对SELEC 语句进行“硬编码”,可以根据需要动态的构造FROM 字句的“表名”。 


 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...