新聞中心
大家都知道ADO.NET關(guān)系數(shù)據(jù)庫,經(jīng)過詳細的調(diào)查用的人還是蠻多的,為此呢給大家介紹介紹ADO.NET Excel讀取的問題。在關(guān)系數(shù)據(jù)庫提供的各種對象中(表、視圖、存儲過程等),Excel 數(shù)據(jù)源僅提供相當于表的對象,它由指定工作簿中的工作表和定義的命名區(qū)域組成。命名區(qū)域被視為“表”,而工作表被視為“系統(tǒng)表”)這里我們將ADO.NET Excel讀取也當作一個“數(shù)據(jù)庫”來對待,然后利用OleDbConnection.GetOleDbSchemaTable 方法,要獲取所需的架構(gòu)信息,該方法獲取的架構(gòu)信息與ANSI SQl-92是兼容的。

成都網(wǎng)站建設(shè)公司更懂你!創(chuàng)新互聯(lián)公司只做搜索引擎喜歡的網(wǎng)站!成都網(wǎng)站制作前臺采用搜索引擎認可的DIV+CSS架構(gòu),全站HTML靜態(tài),HTML5+CSS3網(wǎng)站,提供:網(wǎng)站建設(shè),微信開發(fā),微信小程序,商城開發(fā),手機APP定制開發(fā),域名申請,服務(wù)器租售,網(wǎng)站代托管運營,微信公眾號代托管運營。
#T#注意:對于那些不熟悉 OLE DB 架構(gòu)行集的人而言,它們基本上是由 ANSI SQL-92 定義的數(shù)據(jù)庫構(gòu)造的標準化架構(gòu)。每個架構(gòu)行集具有為指定構(gòu)造提供定義元數(shù)據(jù)的一組列(稱作 .NET 文檔中的“限制列”)。這樣,如果請求架構(gòu)信息(例如,列的架構(gòu)信息或排序規(guī)則的架構(gòu)信息),則您會明確知道可以得到哪種類型的數(shù)據(jù)。如果希望了解更多信息,請訪問 Appendix B:Schema Rowsets。以下是讀取Excel文件內(nèi)“表”定義元數(shù)據(jù),并顯示出來的的ADO.NET Excel讀取程序片斷:
- Code// 讀取Excel數(shù)據(jù),填充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),并且***行作為數(shù)據(jù)返回,且以文本方式讀取
- "data source=" + xlsPath;string sql_F = "SELECT * FROM [{0}]";
- OleDbConnection conn = null;OleDbDataAdapter da = null;
- DataTable tblSchema = null;IList
tblNames = null; - // 初始化連接,并打開conn = new OleDbConnection(connStr);conn.Open();
- // 獲取數(shù)據(jù)源的表定義元數(shù)據(jù)
- //tblSchema = conn.GetSchema("Tables");
- tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
- GridView1.DataSource = tblSchema;GridView1.DataBind();
- // 關(guān)閉連接conn.Close();
接著是一段利用“架構(gòu)信息”動態(tài)讀取Excel內(nèi)部定義的表單或者命名區(qū)域的程序片斷:
- Codexcel數(shù)據(jù),填充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),并且***行作為數(shù)據(jù)返回,且以文本方式讀取
- "data source=" + xlsPath;string sql_F = "SELECT * FROM [{0}]";
- OleDbConnection conn = null;OleDbDataAdapter da = null;DataTable tblSchema = null;
- IList
tblNames = null; - // 初始化連接,并打開conn = new OleDbConnection(connStr);
- conn.Open();// 獲取數(shù)據(jù)源的表定義元數(shù)據(jù)
- //tblSchema = conn.GetSchema("Tables");
- tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
- //GridView1.DataSource = tblSchema;//GridView1.DataBind();
- // 關(guān)閉連接//conn.Close();
- tblNames = new List
(); - foreach (DataRow row in tblSchema.Rows)
- {
- tblNames.Add((string)row["TABLE_NAME"]);
- // 讀取表名}// 初始化適配器da = new OleDbDataAdapter();
- // 準備數(shù)據(jù),導入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 {
- // 關(guān)閉連接
- if (conn.State == ConnectionState.Open) {
- conn.Close();
- }throw;
- }
- }// 關(guān)閉連接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 語句進行“硬編碼”,可以根據(jù)需要動態(tài)的構(gòu)造FROM 字句的“表名”。
分享標題:學習筆記:教你使用ADO.NETExcel讀取文件
網(wǎng)頁地址:http://m.5511xx.com/article/dhdsosc.html


咨詢
建站咨詢
