2009年2月24日 星期二

無法載入 DLL 'oramts.dll'問題

今天在寫分散式交易程式時碰到一個錯誤訊息:

System.DllNotFoundException: 無法載入 DLL 'oramts.dll': 找不到指定的模組。 (發生例外狀況於 HRESULT: 0x8007007E) 於 System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment) 於 System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction) 於 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) 於 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)

環境為
DB : Oracle 10g,SQL Server 2005
Web Server : Windows Server 2003,上裝有Oracle9iClient

根據微軟的說法,會出現這個問題是

當您執行分散式的交易活動時, System.Data.OracleClient 組件使用 Oramts.dll 檔案。 System.Data.OracleClient 組件不會載入,當您嘗試在執行 nontransacted 的活動,或當您使用本機交易。 如果您未包含此元件在安裝 Oracle 用戶端連接軟體,並嘗試使用 System.Data.OracleClient 的分散式的交易,您可能會收到下列錯誤訊息:
System.Data.OracleClient: 無法載入 DLL (oramts.dll)

完整說明可以參考http://support.microsoft.com/kb/843044/zh-tw

後來,查了查google,應該是oramts的版本問題,有興趣進一步了解的可參考這篇
http://jelle.druyts.net/2006/06/25/UnableToLoadOramtsdllTryTheReleaseVersion.aspx

解決的方式有
1.到 http://www.oracle.com/technology/software/tech/windows/ora_mts/htdocs/utilsoft.html下載patch
2.到 http://www.dll-files.com/dllindex/dll-files.shtml?msvcrtd 下載 msvcrtd.dll

第一種方式我還沒試過
第二種記得將下載回的 msvctrd.dll 複製到 C:\Windows\system32 目錄下就可以囉!!

沒有留言:

張貼留言