OleDbDataAdapter方式:
/// <summary> /// 讀取excel的表格放到DataTable中 ---OleDbDataAdapter /// </summary>
/// <param name="strSql"></param>
/// <param name="excelpath">excel路徑</param> /// <returns>datatable</returns> public static DataTable readexcel(string excelpath,string strSql) { OleDbConnection objConn = null; DataTable dt = new DataTable(); try { string excelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + excelpath + ";Excel 8.0;HDR=NO;IMEX=1";//HDR=YES第一行是標題,NO第一行不是標題;IMEX=1表示導入模式,這個模式開啟的 Excel 檔案只能用來做“寫入”用途,還有個重要作用:強制將混合數據轉換為文本,可讀出excel的數字型的內容。 objConn = new OleDbConnection(excelConn); objConn.Open(); OleDbCommand objCmd = new OleDbCommand(strSql, objConn); OleDbDataAdapter adr = new OleDbDataAdapter(); adr.SelectCommand = objCmd; adr.Fill(dt); objConn.Close(); return dt; } catch (Exception ex) { MessageBox.Show(ex.Message); return null; } }
OleDbDataReader 方式:
/// <summary> /// 讀取excel的表格放到DataTable中 ---OleDbDataReader /// </summary>
/// <param name="strSql"></param>
/// <param name="excelpath">excel路徑</param> /// <returns>datatable</returns> public static DataTable readexcel(string excelpath,string strSql) { string excelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + excelpath + ";Excel 8.0;HDR=NO;IMEX=1";//HDR=YES第一行是標題,NO第一行不是標題;IMEX=1表示導入模式,這個模式開啟的 Excel 檔案只能用來做“寫入”用途,還有個重要作用:強制將混合數據轉換為文本,可讀出excel的數字型的內容。 DataTable dt = new DataTable(); try { using (OleDbConnection connection = new OleDbConnection(excelConn)) { OleDbCommand command = new OleDbCommand(strSql, connection); connection.Open(); OleDbDataReader reader; reader = command.ExecuteReader(); dt.Load(reader); //直接把reader轉換為datatable reader.Close(); } return dt; } catch (Exception ex) { MessageBox.Show(ex.Message); return null; } }
從上述兩個例子不難看出,其實excel也相當於一個數據庫,讀取excel的sql語句如:string strSql = "Select * From [sheet1$A10:L24]";//讀取sheet1工作表A10到L24區域的內容
類似的,讀取oracle等數據庫,只需把數據庫引擎等改為相應的類型就可以了。