遇到了一個問題,從excel導入數據到sql2005,之前操作過很多次,這次遇到了一些新情況。
使用的語句如下:
select * from OpenRowSet
('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;HDR=Yes;IMEX=1;Database=E:\bb.xls',
[Sheet1$]
)
結果提示錯誤:因為 OLE DB 訪問接口 'Microsoft.Jet.OLEDB.4.0' 配置為在單線程單元模式下運行,所以該訪問接口無法用於分布式查詢。
查了很多資料一般都是客戶端和服務器端都是64位系統的情況。
我這邊的情況,客戶端使用的是32位的xp系統,服務器sql2005是64位的系統,和很多查到的情況不一樣。
后來我在服務器上安裝了ACE2010的驅動,64位的。
http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=c06b8369-60dd-4b64-a44b-84b371ede16d
修改了代碼
select * from OpenRowSet
('Microsoft.ACE.OLEDB.12.0',
'Excel 8.0;HDR=Yes;IMEX=1;Database=E:\bb.xls',
[Sheet1$]
)
但是還是出錯,提示信息如下:
無法從鏈接服務器 "(null)" 的 OLE DB 訪問接口"Microsoft.ACE.OLEDB.12.0"獲取列信息。
后來看到一個文章說執行以上sql語句的數據庫必須是本地數據庫,如果為遠程的數據庫就會報上面的錯誤。
我嘗試在本地的32位系統上的數據庫操作,一切正常
然后我又在服務器上上傳了excel文件,在服務器上執行語句,一切正常。
然后又在本地執行相同的語句,注意這里的e盤的bb的excel是指的服務器上的e盤,正常。
暈啊暈,這里的地址是指的本地地址,也就是數據庫服務器上的磁盤地址,這個以前真沒太注意啊。