[C#] 使用 OleDb 設定 Excel 連線

  • 14925
  • 0
  • 2010-01-23

摘要:[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\" 這段屬性到底有甚麼用?

  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/

三小俠  小弟獻醜,歡迎指教