最近更換了新服務器,操作系統Windows Server 2008 X64,數據庫SQL Server 2008 X64,Office 2007(好像只有32位),在存儲過程執行OpenDatasource導入Access數據的時候遇到問題了,Oledb 4.0已經不被支持,以下是遇到的若干錯誤提示:
因為 OLE DB 訪問接口 'Microsoft.Jet.OLEDB.4.0' 配置為在單線程單元模式下運行,所以該訪問接口無法用於分布式查詢。
無法創建鏈接服務器 "(null)" 的 OLE DB 訪問接口 "Microsoft.Ace.OLEDB.12.0" 的實例。
因為 OLE DB 訪問接口 'Microsoft.Ace.OLEDB.12.0' 配置為在單線程單元模式下運行,所以該訪問接口無法用於分布式查詢 。
解決方案是安裝Office 2010 64位版, 網上有很多下載,然后下載Microsoft Access Database Engine 2010 的X64版本,網上也有下載,兩者缺一不可。
然后改一下OpenDatasource參數,將 Microsoft.Jet.OLEDB.4.0 改為
Microsoft.ACE.OLEDB.12.0,大功告成。
貼上存儲過程部分代碼:
--
開啟導入功能
exec sp_configure ' show advanced options ', 1
reconfigure
exec sp_configure ' Ad Hoc Distributed Queries ', 1
reconfigure
-- 允許在進程中使用ACE.OLEDB.12
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' AllowInProcess ', 1
-- 允許動態參數
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' DynamicParameters ', 1
-- 導入臨時表
exec ( ' insert into jihua(id,[批次號],Right( ''' + @filepath + ''' ,charindex( '' \ '' ,REVERSE( ''' + @filepath + ''' ))-1),getdate() FROM OPENDATASOURCE ( '' Microsoft.ACE.OLEDB.12.0 '' , '' Data Source= ' + @filepath + ' ;User ID=Admin;Password= '' )...計划匯總表 ')
-- 注意這里,要先關閉外圍的設置,然后再關閉高級選項
exec sp_configure ' Ad Hoc Distributed Queries ', 0
reconfigure
exec sp_configure ' show advanced options ', 0
reconfigure
-- 關閉ACE.OLEDB.12的選項
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' AllowInProcess ', 0
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' DynamicParameters ', 0
exec sp_configure ' show advanced options ', 1
reconfigure
exec sp_configure ' Ad Hoc Distributed Queries ', 1
reconfigure
-- 允許在進程中使用ACE.OLEDB.12
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' AllowInProcess ', 1
-- 允許動態參數
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' DynamicParameters ', 1
-- 導入臨時表
exec ( ' insert into jihua(id,[批次號],Right( ''' + @filepath + ''' ,charindex( '' \ '' ,REVERSE( ''' + @filepath + ''' ))-1),getdate() FROM OPENDATASOURCE ( '' Microsoft.ACE.OLEDB.12.0 '' , '' Data Source= ' + @filepath + ' ;User ID=Admin;Password= '' )...計划匯總表 ')
-- 注意這里,要先關閉外圍的設置,然后再關閉高級選項
exec sp_configure ' Ad Hoc Distributed Queries ', 0
reconfigure
exec sp_configure ' show advanced options ', 0
reconfigure
-- 關閉ACE.OLEDB.12的選項
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' AllowInProcess ', 0
EXEC master.dbo.sp_MSset_oledb_prop N ' Microsoft.ACE.OLEDB.12.0 ', N ' DynamicParameters ', 0