2017-07-03 161 views
1

我得到以下幾點:SQL Server和Microsoft.ACE.OLEDB.12.0

消息7399,級別16,狀態1,第1行OLE DB提供程序 「Microsoft.ACE.OLEDB.12.0」 鏈接服務器「(null)」報告了一個錯誤。提供者沒有提供任何關於錯誤的信息。消息7303,級別16,狀態1,行1無法初始化鏈接服務器「(null)」的OLE DB提供程序「Microsoft.ACE.OLEDB.12.0」的數據源對象。

當我執行從存儲過程中SQLServer的下面 -

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=c:\Users\v-bimoss\Source\Workspaces\External\Onesite\URLoadDB\Templates\T1-Current.xlsx', 'SELECT * FROM [Sheet1$]') 

我經歷過的所有線程我能找到關於這一主題 - 但仍然感到有我已經驗證問題

即:

  1. 64位Microsoft.ACE.OLEDB.12.0驅動程序加載

  2. 特設分佈式查詢設置爲1

  3. 動態參數,並允許製程中都設置爲1個

  4. 更改MSSQL到我的帳戶

  5. 帳戶運行MSSQL和下運行帳戶我使用都有完全訪問C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp

任何幫助,將不勝感激。 -wmm

回答

1

不幸的是,OPENROWSET被認爲是ACE的bug。所以當試圖調整它時,有很多不同的東西需要嘗試。添加和刪​​除一些以下建議對你有希望做到這一點:

1)XLSX文件需要與Excel 12.0 Xml;

2調用)HDR=YES;告知是否頭記錄存在。它會崩潰,如果有,並且你有數字。如果沒有標題,則更改爲NO。

3)IMEX=1;這允許混合的數字和文本字段。如果人們開始在你的數字中混合字母。

4)可能存在基於ACE 12.0與ACE 14.0的註冊表問題。仔細檢查您的版本。

5)最後,怪異怪異...當你有評論(或沒有評論)時,OPENROWSET崩潰。如果你有--comment,通過在破折號後面加一個空格,-- comment有時會有幫助。所以,如果你有意見,嘗試刪除它們或重新安排它們,你可能會得到一個驚喜。 (我知道...這真是事務的悲慘狀況。)

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;IMEX=1;Database=c:\Users\v-bimoss\Source\Workspaces\External\Onesite\URLoadDB\Templates\T1-Current.xlsx', 'SELECT * FROM [Sheet1$]') 

無論如何,因爲OPENROWSET可以是一個有點不穩定,則可能需要使用帶有臨時表,或CSV文件不同的方式的數據導入,等等。但是,如果你得到它的工作,它可以很好。

希望幫助:)

+0

關於你的#4:具體來說,註冊表鍵值'HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes下\ Wow6432Node \的TypeLib \ {000 20813-0000-0000-C000-000000000046}'將在其中具有空節點(空節點用於Office程序的實例,該程序比當前版本的Access/Excel新。我猜安裝程序不是很好)。如果刪除那些空的節點,那麼特定的問題就會消失。 – Brad

0

我有同樣的問題。通過安裝提供商的一些答案,處理隱瞞的錯誤,我有一個短暫的歡樂時刻,當我沒有得到一個直接的錯誤 - 而不是查詢從未返回...

我終於明白了在浪費了超過一天的時間後工作。最終的解決方案是將SQL Server更改爲本地系統帳戶以進行登錄。

這裏就是我所做的:

  1. 確保辦公室和SQL Server具有相同的位寬(在我的案件64位)。

  2. 安裝ACE provider for 64-bit(噴氣爲32位)

  3. 配置服務器

    USE [MSDB] 
    GO 
    
    sp_configure 'show advanced options', 1 
    GO 
    RECONFIGURE WITH OverRide 
    GO 
    sp_configure 'Ad Hoc Distributed Queries', 1 
    GO 
    RECONFIGURE WITH OverRide 
    GO 
    
    USE [master] 
    GO 
    
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'AllowInProcess', 1 
    GO 
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'DynamicParameters', 1 
    GO 
    
  4. 配置SQL登錄。在SQL Server配置管理器

    • 打開服務器屬性 - >登錄 - >登錄爲:
    • 切換到內置帳戶 - 本地系統
  5. 最後,這裏是我的查詢:

    SELECT * FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.16.0' 
    ,'Excel 12.0;Database=C:\Temp\Test.xlsx;HDR=YES' 
    ,'SELECT * FROM [Sheet1$]') 
    
相關問題