最近一直在做數據錄入,要Excel中的數據導入到數據庫中,由於數據量太大,弄了個小程序,在調Excel組件的時候出了一點問題,在網上搜到了解決辦法,記錄一下。

檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。
説明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。

異常詳細信息: System.UnauthorizedAccessException: 檢索 COM 類工廠中 CLSID 為 {00024500-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005。

ASP.NET 未被授權訪問所請求的資源。請考慮授予 ASP.NET 請求標識訪問此資源的權限。ASP.NET 有一個在應用程序沒有模擬時使用的基進程標識(通常,在 IIS 5 上為 {MACHINE}"ASPNET,在 IIS 6 上為網絡服務)。如果應用程序正在通過 <identity impersonate="true"/> 模擬,則標識將為匿名用户(通常為 IUSR_MACHINENAME)或經過身份驗證的請求用户。

要將 ASP.NET 訪問權限授予某個文件,請在資源管理器中右擊該文件,選擇“屬性”,然後選擇“安全”選項卡。單擊“添加”添加適當的用户或組。突出顯示 ASP.NET 帳户,選中所需訪問權限對應的框。


具體解決方法如下:
1:在服務器上安裝office的Excel軟件.
2:在"開始"->"運行"中輸入dcomcnfg.exe啓動"組件服務"
3:依次雙擊"組件服務"->"計算機"->"我的電腦"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 應用程序",在它上面點擊右鍵,然後點擊"屬性",彈出"Microsoft Excel 應 用程序屬性"對話框
5:點擊"標識"標籤,選擇"交互式用户"
6:點擊"安全"標籤,在"啓動和激活權限"上點擊"自定義",然後點擊對應的"編輯"按鈕,在彈出的"安全性"對話框中填加 一個"NETWORK SERVICE"用户(注意要選擇本計算機名),並給它賦予"本地啓動"和"本地激活"權限.
7:依然是"安全"標籤,在"訪問權限"上點擊"自定義",然後點擊"編輯",在彈出的"安全性"對話框中也填加一個"NETWORK SERVICE"用户,然後賦予"本地訪問"權限.
這樣,我們便配置好了相應的Excel的DCOM權限. 注意:這是在WIN2003上配置的,在2000上,可能是配置ASPNET用户 由於EXCEL是在服務器上打開的,所以應該寫一個把導出數據保存在服務器上,
然後再傳遞給客户端的方法,最後每次調 用這個功能的時候再刪除以前在服務器上所生成的所有Excel

 

The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.

操作系統:Windows Server 2008 64位企業版
數據庫:SqlServer 2005 64位企業版
環境:SqlServer 2005 SSIS package

在SSIS的package中讀取.xlsx文件,因為SQL SERVER 2005不支持直接讀取此類文件,所以採取用'Microsoft.ACE.OLEDB.12.0來讀取,包執行中提示錯誤:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
即:(未在本地計算機上註冊“Microsoft.ACE.OLEDB.12.0”提供程序)

其中AccessDatabaseEngine.exe正確默認安裝。
在產品服務器上環境相同,包的執行正確,這個服務器是我自己新建的,不知道哪裏設置有問題。

在JOB中調用package的時候,我的確是用的DTExec.exe這個工具,但我用的是默認的x64的。
看了您的建議以後我改用x86的DTExec,可以成功。
再次感謝!

現在我將此問題總結一下:



1.在用SQL SERVER 2005訪問.xlsx文件(office2007&2010文件格式)時,必須用
provider 'Microsoft.ACE.OLEDB.12.0' 來實現。
2.首先要安裝AccessDatabaseEngine.exe。
下載路徑:http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en
3.在32位系統中可以在數據庫中看見這個provider。
4.在64位系統中不能看見它,這時需調用
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
來執行package。

若目標應用程序不能將應用程序池"啓用兼容32位應用程序",只能在64位應用程序池下運行,且又想有上傳Excel的功能,可按如下方式:

a、創建Asp.net WebService application 程序,並通過WebService來連接訪問Excel。

b、將此webservice application的應用程序池按方案1方式設置“啓用兼容32位應用程序”。

c、在目標應用程序中添加此webservice。


若目標應用程序不能將應用程序池"啓用兼容32位應用程序",只能在64位應用程序池下運行,且又想有上傳Excel的功能,可按如下方式:

a、創建Asp.net WebService application 程序,並通過WebService來連接訪問Excel。

b、將此webservice application的應用程序池按方案1方式設置“啓用兼容32位應用程序”。

c、在目標應用程序中添加此webservice。