台灣最大程式設計社群網站
線上人數
759
 
會員總數:244989
討論主題:188956
歡迎您免費加入會員
討論區列表 >> Blog精華文章 >> 訊息 7308,層級 16,狀態 1,行 1 OLE DB 提供者 'Microsoft.Jet.OLEDB.4.0' 不能用來散佈查詢,因為提供者是設定成以單一執行緒 Apartment 模式執行。
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
訊息 7308,層級 16,狀態 1,行 1 OLE DB 提供者 'Microsoft.Jet.OLEDB.4.0' 不能用來散佈查詢,因為提供者是設定成以單一執行緒 Apartment 模式執行。
價值 : 0 QP  點閱數:1260 回應數:0

樓主

花旗蔘 版主
高級專家
10938 129
4319 516
發送站內信

 

-----Microsoft.Jet.OLEDB.4.0 vs Microsoft.ACE.OLEDB.12.0

之前依工作需求,需將txt 檔案 轉入至ms sql,個人是習慣用sql語法來達成目的,而不用SSIS或DTS這類工具。
 

利用opendatasource 函數,Provider:Microsoft.Jet.OLEDB.4.0
會報錯:

訊息 7308,層級 16,狀態 1,行 1
OLE DB 提供者 'Microsoft.Jet.OLEDB.4.0' 不能用來散佈查詢,因為提供者是設定成以單一執行緒 Apartment 模式執行。

後來了解到,我的系統是window server2008R2 x64 + MS SQL 2008R2 x64 而Microsoft.Jet.OLEDB.4.0是沒有x64的版本,
可改用Microsoft.ACE.OLEDB.12.0,而系統預設上是沒安裝的,這時可去微軟網站上
下載安裝 X64版的 Microsoft Access Database Engine 2010 可轉散發套件

http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

安裝完即可使用 Microsoft.ACE.OLEDB.12.0 來存取txt了。

補充:
使用上沒問題一陣子後,有天突然報錯了,DEBUG的結果是,原TABLE轉出的TXT檔中的欄位字串資料有 , 存在,系統預設將 ,  當作欄位的delimited。

因此將TABLE 資料匯出成TXT時,改用別的符號當作欄位的dellimited,例如:  ~ ,當然也要跟ap人員協調 勿再輸入此符號,以免又誤判了。

然後txt檔匯入至另個instance的db時,在原本的 Extended Properties 加上FMT=Delimited(~)
EX:
select *
from OpenDataSource('Microsoft.ACE.OLEDB.12.0',
'Data Source = d:\;Extended Properties="Text;HDR=no;FMT=Delimited(~)"')...abc#txt

但似乎無法正確將 ~ 當作欄位delimited,
HDR=no 是ok的,但FMT=Delimited(~) 或 Format=Delimited(~) 都不work,
不知是否為屬性名稱的問題?

後來改在txt檔的同層目錄下 建立一個Schema.ini,讓text driver 依此設定來存取

ex:
[abc.txt]
Format=Delimited(~)
ColNameHeader=FALSE
 

-------------------
這樣就ok了!!


本篇文章發表於2012-03-14 11:35
== 簽名檔 ==
Oracle/EBS/MS SQL DBA
--My BLOG
http://itgroup.blueshop.com.tw/benchenBEN/blog
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.