![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 小凡 ![]()
![]() ![]() |
我有二台SQL SERVER, 若不用BeginTransaction, 即可正常跨資料庫insert或update , 為保持資料的正確性, 所以在.NET下BeginTransaction, 但出現了以下的錯誤, 後來我改成用參考了這些文章 http://www.blueshop.com.tw/board/show.asp?subcde=BRD20060308012046AKI&fumcde=FUM20041006152735ZFS&rplcnt=3 http://www.blueshop.com.tw/board/show.asp?subcde=BRD20070514102803Q7F&fumcde=FUM20041006152735ZFS&rplcnt=16 所以改用BEGIN DISTRIBUTED TRAN來做 但改成BEGIN DISTRIBUTED TRAN發生另外的問題 因此去找了相關的文章如下 1.這篇文章http://blogs.msdn.com/mab/archive/2005/12/30/508273.aspx內的連結http://support.microsoft.com/?kbid=873160 2.http://forums.microsoft.com/TechNet-CHT/ShowPost.aspx?PostID=1026321&SiteID=23 設定完後還是發生了如下的問題 小弟以做完如下的設定 1.MS DTC都已經啟動了 2.在 [ 執行 ] 對話方塊, 輸入 Services.msc ,分散式交易協調器是running的,設定為"網路服務"。 3.沒有開防火牆,但一樣照個文章把msdtc及port:135加入防火牆的例外中 4.SQL語法也改成了如下的寫法 請問我該如何try這個問題呢? 請各位前輩大大們指導一下 謝謝
本篇文章發表於2008-03-21 09:27
|
1樓 |
要有帳號及密碼驗證權限吧?!..
不然那個MSSQL有那麼簡單就只有IP位置,就是被新增@@""" --Oracle --SELECT * FROM OPENDATASOURCE('MSDAORA','Data Source =x.x.x.x;User ID=admin;Password=1234')..資料庫名稱.資料表名稱 --MSSQL SELECT * FROM OPENDATASOURCE('SQLOLEDB','Data Source =x.x.x.x;User ID=admin;Password=1234').資料庫名稱.dbo.資料表名稱 如果出現以下的錯誤訊息,請到介面組態→功能的介面組態的第一項打勾即可使用~ SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用 sp_configure 來啟用 'Ad Hoc Distributed Queries' 的使用。如需有關啟用 'Ad Hoc Distributed Queries' 的詳細資訊,請參閱《SQL Server 線上叢書》中的<介面區組態>(Surface Area Configuration)。
本篇文章回覆於2008-03-21 12:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
小凡 ![]() ![]() |
謝謝"純真的人"前輩回覆...
我在A DB的物件伺服器中已經設了B DB的連結伺服器(帳號密碼也在那邊設了) 敝人文章有提到: 若不用BeginTransaction, 即可正常跨資料庫insert或update, 這代表遠端新增修改是沒問題的... 但如果加了BEGIN TRAN or BEGIN DISTRIBUTED TRAN就會發生問題... 不過您說的我還是照做了一次... 結果還是一樣不行囉 >"< 請各位前輩指引小弟一下呀 感激不盡哩
本篇文章回覆於2008-03-21 12:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
剛剛去測試一下...
若單獨這樣 SELECT * FROM OPENDATASOURCE('SQLOLEDB','Data Source =x.x.x.x;User ID=admin;Password=1234').資料庫名稱.dbo.資料表名稱 是ok的... 但加了... BEGIN DISTRIBUTED TRAN; SELECT * FROM OPENDATASOURCE('SQLOLEDB','Data Source =x.x.x.x;User ID=admin;Password=1234').資料庫名稱.dbo.資料表名稱 COMMIT TRAN; 出現這個...暫找不出原因@@a 連結伺服器 "(null)" 的 OLE DB 提供者 "SQLNCLI" 傳回訊息 "協力電腦異動管理員已經停用了對遠端/網路異動的支援。"。 訊息 7391,層級 16,狀態 2,行 2 無法執行作業,因為連結伺服器 "(null)" 的 OLE DB 提供者 "SQLNCLI" 無法開始分散式交易。 但若本機查詢就ok... BEGIN DISTRIBUTED TRAN; SELECT * FROM 資料表 COMMIT TRAN;
本篇文章回覆於2008-03-21 14:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓
作者回應
小凡 ![]() ![]() |
回"純真的人"前輩...
請問您的MS DTC有通嗎? 可以測試一下喔 http://support.microsoft.com/kb/306843/zh-tw (立即下載 DTCPing.exe) 我這邊RPC DTC是Success的了... ADO.NET2.0有提供EnlistTransaction (EnlistDistributedTransaction)方法... 不曉得能不能解決 還在測試中... 請各位大大指導小弟一下...感激不盡 謝謝
本篇文章回覆於2008-03-21 15:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓 |
嗯...可惜不能隨便裝DTCPing.exe軟體來測@@"..
ps.另一台控制權不是我的@@"
本篇文章回覆於2008-03-24 14:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |