C#用ado.net訪問EXCEL的常見問題及解決方法

C#用ado.net訪問EXCEL的常見問題及解決方法,除了像sql server,access常見的數據庫,其實Excel文件也能夠作爲數據庫訪問。sql

ado.net訪問excel的實例:數據庫

OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = @"provider=Microsoft.jet.oledb.4.0;data source=[excel文件路徑];Extended Properties=""Excel 8.0;HDR=YES;"""; cn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", cn); dtCode = new DataSet(); oda.Fill(dtCode); dataGridView1.DataSource = dtCode.Tables[0].DefaultView;ide

注意:this

一、Excel的工做簿名做爲表名,如Sheet1書寫爲[Sheet1$],[]和$都不能省略spa

二、訪問方式爲oledb方式,provider=Microsoft.jet.oledb.4.0 ,特別是Extended Properties=""Excel 8.0;HDR=YES;"" 不能省略,省略就錯了。HDR=YES表示excel表格的第一行數據做爲表的字段名,實際數據從第二行開始。.net

我在第一次作的時候碰到兩個問題。excel

(1)提示"找不到可安裝的ISAM"code

這個是因爲鏈接字符串缺乏Extended Properties=""Excel 8.0;HDR=YES;"" 致使的。server

(2)提示"索引103開始處,初始化字符串的格式不符合規範"blog

這是因爲鏈接字符串書寫錯誤形成的,請參考正確的格式。這個錯誤的提示對應的連接字符串以下:

"provider=Microsoft.jet.oledb.4.0;data source=[excel文件路徑];Extended Properties=""Excel 8.0;HDR=YES;" 能夠看到錯誤是因爲Extended Properties的值是由""括起來的,因爲丟失了右邊的括號,形成不符合規範。

若是您用的 EXCEL2010,注意鏈接串須要修改:

strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" +   @"Data Source=" + excelFilename + ";" +   "Extended Properties=\"Excel 12.0 Xml;HDR=No\"";

 

複製代碼
 1 /// <summary>
 2 /// 將CSV轉化爲DataTable
 3 /// </summary>
 4 /// <param name="strFilePath"></param>
 5 /// <returns></returns>
 6         public static DataTable CSVToDataTable(string strFileFullPath)
 7         {
 8             if (string.IsNullOrEmpty(strFileFullPath))
 9             {
10                 return null;
11             }
12             DataTable dt = new DataTable();
13             try
14             {
15                 //獲得路徑
16                 string strFilePath = Path.GetDirectoryName(strFileFullPath);
17                 //獲得文件名
18                 string strFileName = Path.GetFileNameWithoutExtension(strFileFullPath);
19                 //讀取CSV文件
20                 string connString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + strFilePath + ";Extensions=asc,csv,tab,txt;";
21                 using (OdbcConnection odbcConn = new OdbcConnection(connString))
22                 {
23                     odbcConn.Open();
24                     OdbcCommand oleComm = new OdbcCommand();
25                     oleComm.Connection = odbcConn;
26                     oleComm.CommandText = "select * from [" + strFileName + "#csv]";
27                     OdbcDataAdapter adapter = new OdbcDataAdapter(oleComm);
28                     adapter.Fill(dt);
29                     dt.TableName = strFileName;
30                     odbcConn.Close();
31                 }
32             }
33             catch (Exception)
34             {
35                 throw;
36             }
37             return dt;
38         }
複製代碼
相關文章
相關標籤/搜索