1. 程式人生 > >.Net下使用System.Data.OracleClient出現“ORA-12154問題“TNS: 無法處理服務名”問題的解決

.Net下使用System.Data.OracleClient出現“ORA-12154問題“TNS: 無法處理服務名”問題的解決

昨天,我在用Visual Studio 2005 C#.Net寫一段連線Oracle資料庫的Windows系統服務程式時,發現每當連線Oracle資料庫在OracleConnection.Open()事件中每次都出現“ORA-12154問題“TNS: 無法處理服務名”的錯誤,於是開始了下面的3個小時以上的原因查詢。

  一開始以為是連線字串沒寫正確,於是從以前寫的其它程式中把連線字串複製過來,結果問題依舊。

  找著,我以為是本機的Oracle客戶端沒配置好,於是檢查Oracle的Net配置,Oracle沒問題,但程式問題依舊。

  因為我的電腦上同時安裝了Oracle 8和Oracle 9i,所以開始想到是不是程式在呼叫Oracle客戶端版本時出現的問題?於是找了N個以前寫過的Oracle相關應用程式,但那些程式執行都很正常,唯獨昨天寫的那段程式問題依舊。

  我又想到是不是我引用的System.Data.OracleClient有問題,於是反覆地把這個元件從引用中去掉,然後重新引用,但問題依舊。

  昨天的程式中我引用到了兩個自已寫的Dll,於是懷疑是這兩個Dll在寫系統服務程式時會引用不到而導致整個程式問題,於是去掉了這兩個引用,結果問題依舊。

  找了3個小時原因,未果。看看時間,已是凌晨,便回家睡覺去了。

  今天早上,寫了一小段測試程式,把昨天那段程式碼裡的資料庫連線的三行小程式碼複製到測試程式中,結果執行正常。這下我敲壞腦袋都想不出昨天的那段程式碼有什麼問題了。

  “使用OracleClient.OracleConnection時(我連的是Oracle 9i,其他版本未知),如果你的執行目錄太長或者有括號等(未考察有些什麼符號),那麼即使你的服務名是對的,也會引起ORA-12154問題“TNS: 無法處理服務名”,當出現這個問題時,請也考慮這個原因。 ”

  看完後,還真發現我的程式程式碼存放的資料夾名中有一對括號“()”,根據帖子提示,我將資料夾名稱中的括號去掉,結果昨天的那段程式碼執行正常了!!!

  暈死啊!!我的3個小時居然浪費在一對小括號上!!

  感謝那位發帖人!感謝網際網路!