WebService訪問oracle數據庫本地調試-一步一個坑##
上篇文章提到我們額數據庫掛了,重裝了數據庫,然后呢我需要在本地調試WebService,看看那些數據結構缺失,遷移到新數據庫中去。踩坑之路正式開始,當然這不是WebService這個項目埋下的坑,應該是每個使用oracle開發WebService要踩的坑,我踩過了,希望你看到后可以輕松過去。
我的連接字符串是這樣的
<add name="oracle" connectionString="Data Source=192.168.1.188:1521/orcl;Persist Security Info=True;User ID=user;Password=pdw;Unicode=True" providerName="System.Data.OracleClient"/>
這里通過System.Data.OracleClient
連接oracle數據庫。踩坑之路開始...
1. ORA-12154: TNS: 無法解析指定的連接標識符
這個坑其實大家一般都不會踩到,當然入門者另當別論。
這個問題出現是因為使用System.Data.OracleClient
連接數據庫,需要我們本地安裝oracle客戶端,配置oracle服務。
具體配置方法,大家百度一下,比比皆是。
可以通過tnsping 服務名驗證服務是否可訪問。
2. System.Data.OracleClient需要Oracle 客戶端軟件8.1.7或更高版本
這個錯誤比較初次看到以為是自己oracle客戶端版本不對,了解之后才知道是跟文件夾權限有關。我們需要把NETWORK_SERVICE這個用戶添加到client\bin
文件夾的讀取和執行權限上去。具體添加方法可參照這里。記得添加操作完成之后一定要重啟電腦,否則可能沒有效果。
我在解決的過程中把Authenticated Users這個用戶也添加進去了,如果你只添加NETWORK_SERVICE不行,可以把這個用戶也添加進去。
3. 嘗試加載 Oracle客戶端庫時引發 BadImageFormatException。如果在安裝32 位 Oracle客戶端組件的情況下以 64位模式運行,將出現此問題
這個問題系統有關,網上提供的方案也比較多,但是需要跟自己的具體開發環境和服務器環境匹配一下才能解決自己的問題。我的oracle數據庫服務器是32位,我本地是win10系統64位。剛開始我裝了一個64位的客戶端,運行就出現了上面的錯誤。然后換成32位的客戶端就OK了。
裝32位客戶端的時候會有
,點是就行了。
4. ORA-00942: 表或視圖不存在
這個問題你不一定能碰到,因為這跟我本地的一個存儲過程有關。但是這個坑水太深,非了我好大的勁才爬上來。一路過關斬將以為終於大功告成,沒想到又來一個表或試圖不存在
。可是,可是我調用的是package
里面的一個存儲過程,而且編譯通過啊。
這個問題我懷疑過權限問題,但是我這個用戶下是可以看到權限的;懷疑過代碼,但是之前代碼是正常運行的;我都要懷疑人生了,然后靈光一現我發現問題所在,各位看看不知是否吃驚:
sqlstrtemp := ' insert into temp_sum select carid,company_name,count(carid) from '||itablename||' a
left join company b on a.companyid = b.company_id ';
execute immediate sqlstrtemp;
這是我存儲過程的一段代碼,這里有一個表名base_company
,對,就是它,我遷移的數據庫中沒有這張表,但是我的存儲過程編譯通過了。因為這里是動態拼接的sql語句,所以我編譯通過了,所以呢,我的表和視圖不存在的錯實際是發生在這里。OK,建表,問題解決。
其實關於oracle的各種異常的解決方法網上有很多,這里這是想把自己調試一個項目的完整的經歷記錄下來,方便你我查閱。