【茶包射手專欄】ADO.NET開啟Excel傳回未知錯誤0x80004005
【問題】
使用"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\SomeExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;'"的OleDbConnection方式開啟Excel檔案,在本機執行正常,在Server上卻得到0x80004005錯誤,訊息為"未知的錯誤"
【排除步驟】
- 檢查Server上的目錄,該檔案確實存在。
- 由於0x800004005是典型的Access Denied訊息,但使用Process Monitor監看,卻沒有發現存取檔案/Registry被拒的記錄。
- Google了一下,沒找到完全相符的情境,但有篇文章提到了system32/msexcl40.dll,它是Jet 4.0的相關檔案,註冊失效時會傳回"Could not find installable ISAM"訊息,與本次遇到的訊息並不同,但依該文作者的經驗,雖然訊息不同,但試了有效。所以... 我當然要試試,又不會少塊肉。
- regsvr32 msexcl40.dll後再試,仍然無效。但IISRESET後再試則成功。
由於先後做了regsvr32 msexcel40.dll及IISREST後修復了這個問題,無法確定何者是關鍵(或者兩者都為必須)。為了驗證,regsvr32 /u msexcl40.dll後再試,會得到Could not find installable ISAM,亦非原來的錯誤訊息。
問題解了,但真實原因未能釐清。總之,有相同情境的朋友,不坊試試以上步驟,如有不同發現,歡迎留言回饋給我。