2011年11月4日 星期五

Microsoft.Jet.OLEDB.4.0提供者並未登錄於本機電腦上

今天要用 C# 透過 OLEDB 開啟 Excel 檔案讀取資料,
上網查了一下連接字串大概是這樣寫的
【Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"】



這一篇對於連接字串的說明說的比較詳細【透過 OleDb 精準讀入 Excel 檔的方法



所以我就依樣畫葫蘆建立一個 OleDbConnection 的變數開始連接 Excel 吧!
程式如下:


            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX=1\"";


            connString = string.Format(connString, fileName, hasHeader ? "Yes" : "No");
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();




原本以為這樣就結束了,沒想到卻出現了下面這個錯誤訊息!




阿咧!這是甚麼鬼丫!
寫程式這麼久,從來沒看過這樣的錯誤!
【Microsoft.Jet.OLEDB】不是作業系統提供的嗎?
不然裝了 Office 應該也會有才對丫?
馬上查了一下我電腦的 ODBC 裡面居然空空如也!



這.....這.....這.....這.....
打從我有看過 ODBC 以來,從來沒看過這麼空的丫!
我不信邪!馬上打開我的虛擬的XP看一看!
很多嘛!而且滿滿滿的....



然後在XP測試了一下我的程式,
OK的~~~是可以跑的嘛!


只好繼續孤狗了,找到了這篇文章,
Microsoft.Jet.OLEDB.4.0 提供者並未登錄於本機電腦上
原來是 Microsoft Jet 沒有 64 位元的 Driver 丫!
恩恩~~~我的 NB 是 Win7 64 的版本!


所以程式要編譯成 32 位元的喔!
感覺好鳥喔!不過還是照著做一遍吧!
結果咧、結果咧.....
看來是整個方案都要編譯成 32 位元的才可以,
不可以單一個 dll 編譯成 32 位元,這樣程式根本無法把這個 32 位元的 dll 給載入!
果然夠鳥~~~這時心中默默的出現了 e04 這樣的字眼!


繼續孤狗~~~然後找到了這篇
Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine


恩~~~微軟已經出了 64 位元的 Driver 了!
喔耶!趕快去下載來裝裝!下載網址如下:
Microsoft Access Database Engine 2010 可轉散發套件
記得抓 64 位元的喔!
但是衰咖總是不會有順利的一天!
安裝的時候又跳出了一個對話視窗!我恨對話視窗



阿咧!是要我移除我的 Office 嗎?幹!這樣以後怎麼工作!
只好摸摸鼻子把我的 Office 移除.....
然後最後終於可以安裝啦!
裝好之後我的 ODBC 果然就出現了這些可愛的 Driver 嚕!



然而衰咖不愧是衰咖!
程式還是出現了一樣的錯誤訊息!



這時候已經不自覺的開口了!
只能繼續孤狗!孤狗真是衰咖工程師的好朋友丫!(無誤)
然後又找到這篇
遭遇錯誤: Msg 7308、Msg 7320、Msg 7415(訊息 7302、訊息 7308、訊息 7415);以使用 OPENROWSET 與 OPENDATASOURCE 函數為例


看來是連接字串要修改,


            string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX=1\"";


改成這樣之後用 OleDB 開 Excel 看起來就沒有問題啦!
這篇的衰咖之路就到此為止吧!
只是為了開啟 Excel 我的電腦沒 Office 了耶!e04



3 則留言:

  1. 讚!!! 若能早點看到這篇文章...就可以省了很多白工
    感謝大大無私的分享

    回覆刪除
  2. 人還是要夠衰才可以這樣一路錯到底的!(無誤)

    回覆刪除