對oracle不算熟,對.net結合oracle開發項目也只做過一個。最近換了新電腦,裝了win7 64位系統,然后各種軟件各種要裝啊,問題就一堆一堆來了。
現在列出一些研究折騰比較長時間的問題,供以后及挨踢的同學們參供。
公司用的是oracle10g,vs2010,都是32位的
1) oracle10g在64位win7無法直接安裝,解決方法:在安裝啟動exe文件右鍵打開屬性菜單,然后選擇兼容性--->勾選以兼容性運行這個程序-->選擇winxp,保存后可以安裝。
2)之前用winxp32位系統,連接字符串是這樣子的 <add name="SQLMembershipConnString2" connectionString="Data Source=ORCL;User Id=system;Password=123456;" providerName="Oracle.DataAccess.Client"/>
換到現在64位win7后一直不能運行,折騰了一天才知道竟然是連接字符串的問題。提示的錯誤是說oracle客戶端版本不夠高,不管連接字符串怎么改都是一樣錯誤提示,百度后找到很多文章都是說權限不足原因(不確定是否有這個原因),改了后還是一樣問題,這個問題折騰了我一天的時間!!,后來還下載了oracle的odp.net組件,32位的64位的各種折騰,都有錯誤提示,按錯誤提示在網上搜索都不能解決。以為framework的類和odp.net有兼容問題。后來他仔細看了odp.net的說明,本來打算是連接遠程服務器,就試着用 <add name="SQLMembershipConnString3" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.253.11)(PORT=1521)) (CONNECT_DATA=(SID=HZDB)));User Id=test;Password=123456;" providerName="Oracle.DataAccess.Client"/>這樣的字符串,因為之前大量變動的原因,所以也折騰了很久也沒連上,正當我打算要放棄回家重裝32位系統時,刷頁面發現錯誤提示是“未找到表或視圖”,我靠!然后就這樣發現了問題的根源:連接字符串不對呀。經過測試發現另外一種寫法也是可以的: <add name="SQLMembershipConnString" connectionString="Data Source=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.253.128)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
);User Id=test;Password=123456;
" providerName="Oracle.DataAccess.Client"/>
由於其間相換odp.net組件,因為各種不了解,走了一些彎路,花的時間也多了。網上也有不少人遇到這種問題,不過都沒發現有人給出這個答案。
嗚呼唉哉。。。微軟不想更新System.Data.OracleClient組件了,也不用這么省功夫吧,只要連接不上只有一個錯誤提示:oracle客戶端版本不夠高,希望給那個漚血中的挨踢同學們一個參考,IT不容易呀。
補充: 經過了一個多月,不斷發現一些問題,今天找資料時無意中發現一上面System.Data.OracleClient不能連oracle的原因,並且有了解決方法,順便糾正一下之前上文的錯誤,window7 64位系統,裝的是32位oracle10g,需安裝32位11g客戶端,我下裝安裝的版本是ODTwithODAC1120320_32bit.zip,默認System.Data.OracleClient不能連oracle,需要改一下電腦系統的環境變量path,把默認的oracle路徑改為可以正常訪問的客戶端路徑(如我的路徑:D:\oracle\product\product\11.2.0\client_1)。原因是System.Data.OracleClient訪問oracle數據庫是會依照PATH路徑尋找oci.dll,如果oci.dll的版本不支持64.net就會失敗不能連接數據庫,改為能用的客戶端就能連接數據庫了。