摘要:[C#] 使用 OleDb 設定 Excel 連線
網路上已經有許多技術文章,自己也來記錄一下。
第一步:打開 VS,在伺服器總管標籤裡的資料連結上面,右鍵,加入資料連結,選擇 OleDb 資料提供者,並且按下確定。
(圖一)
第二步:選擇提供者為 4.0, 按下資料連結,會彈出另一個視窗可以選擇檔案來源(如圖三),接著按下進階。
(圖二)
(圖三)
第三步:設定 Extended Properties 屬性,並且測試連線,成功。
希望以上說明,沒有讓你更加混淆,上面是使用 VS 去設定連線。若是使用程式又該怎麼做呢?
string sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\Bool1.xls;" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
再來補充一些細節。
"Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\" 這段屬性到底有甚麼用?
- Excel 8.0
為 Excel 格式,這個格式從 Excel 97 到 Excel 2003 都相容
2. HDR ( HeaDer Row )
若設定值為 Yes,代表 Excel 檔中的工作表第一列是欄位名稱
若設定值為 No,代表 Excel 檔中的工作表第一列就是資料了,沒有欄位名稱
3.IMEX ( IMport EXport mode )
當 IMEX=0 時為「匯出模式」, Excel 檔案只能用來做「寫入」用途。
當 IMEX=1 時為「匯入模式」, Excel 檔案只能用來做「讀取」用途。
當 IMEX=2 時為「連結模式」,Excel 檔案「讀寫」。
網路上流傳有時候讀資料時,有時正常,有時為 null ?
先登入系統機碼,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
有一個 TypeGuessRows 值, 預設是 8, 表示會先讀取前 8 列來決定每一個欄位的型態, 所以如果前 8 列的資料都是數字, 到了第 9 列以後出現的文字資料都會變成 null,只要把 TypeGuessRows 機碼值改成 0, 就可以解這個問題了!
補充:
1.這邊少提醒了重要的一點,當機碼改成 0 時,會有效能上的影響, 因為 Jet Engine 會將所有資料讀完才會判斷出每個欄位應該用什麼資料格式。
2.線上連線字串查詢 www.connectionstrings.com/
三小俠 小弟獻醜,歡迎指教