1.Microsoft.ACE.OLEDB.12.0 簡介
就是一個數據訪問接口,用於在office文件和非office應用程序間傳輸數據。例如 Microsoft Office Access 2010(*.mdb和 *.accdb)文件和Microsoft Office Excel 2010(*.xls、*.xlsx和 *.xlsb)文件)與其他數據源(例如 Microsoft SQL Server)之間傳輸數據。
2.Microsoft.ACE.OLEDB.12.0 在 MSSQL中的應用
1) 查看是否已經安裝此接口
進入SSMS后,在對象資源管理器中,位次展開“服務器對象”--- “鏈接服務器”---“訪問接口”,如果在訪問接口下面找到了Microsoft.ACE.OLEDB.12.0(如下圖),則說明已經安裝此接口。也有可能版本號不是12.0,此版本是對應Office 2010的。一般情況下,如果安裝了Office,此接口會跟着一起被安裝。
2) 安裝接口
如果沒能找到此接口,說明系統沒有安裝Office或者所安裝版本(32bit或64bit)與SQL Server版本不一致。可以有如下解決方案:
a) 若Office與MSSQL位數不一致,重新安裝與SQL Server位數相同的Office,同為32bit或64bit;
b) 若不准備安裝Office,可以單獨安裝Microsoft.ACE.OLEDB.12.0:32bit下載 或64bit下載。
若安裝時出現點擊后閃退,可以先用WINRAR將exe安裝包解壓,再運行里面的setup
3)使用接口讀取Excel文件示例
讀取D盤目錄下的Test.xlsx文件Sheet1中的內容
SELECT ID,Content FROM
OPENDATASOURCE ('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=Yes;IMEX=1;Database=D:\Test.xlsx')... [sheet1$]
3.常見問題
1)
消息 7403......尚未注冊 OLE DB 訪問接口 "Microsoft.ACE.OLEDB.12.0"。
原因:當前所連數據庫所在服務器,未安裝此接口。
解決方案:參見上面第2點。
2)
消息 15281……SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的訪問,因為此組件已作為此服務器安全配置的一部分而被關閉
可能原因:未開啟 Ad Hoc Distributed Queries(即席分布式查詢)
參考解決方案:用代碼開啟 Ad Hoc Distributed Queries
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO
3)
消息 7399……鏈接服務器 "(null)" 的 OLE DB 訪問接口 "Microsoft.ACE.OLEDB.12.0" 報錯。訪問被拒絕。
消息 7301……無法從鏈接服務器 "(null)" 的 OLE DB 訪問接口 "Microsoft.ACE.OLEDB.12.0" 獲取所需的界面("IID_IDBCreateCommand")。
消息 7302……無法創建鏈接服務器 "(null)" 的 OLE DB 訪問接口 "MSDASC" 的實例
可能原因:SQL Server(MSSQLSERVER) 的登陸身份不合適
參考解決方案:將相關服務的登陸身份改為 local system
操作方法:
運行 services.msc,找到SQL Server(MSSQLSERVER),右鍵屬性,登陸相關選項卡,本地系統帳戶。
或
開始---所有程序---MicrosoftSQL Server 2008 R2(或其他版本)---配置工具---SQLServer 配置管理器,找到SQL Server(MSSQLSERVER) ,右鍵屬性,登陸選項卡,內置帳戶改為Local system。
最后,若在MSSQL JOB中也要用到此接口,則SQL Server代理(MSSQLSERVER)這個服務也要做相同修改。
4)
返回了消息 "Microsoft Access 數據庫引擎無法打開文件“”或向其寫入數據。它已經被其他用戶以獨占方式打開,或者您沒有查看和寫入其數據的權限
文檔已被本地賬號打開,關閉即可,如果要打開時也可以訪問,請用Windows身份驗證方式登陸。