.net連oracle資料庫的兩個方法介紹
1. 安裝oracle用戶端,串連oracle
需要在用戶端%oracle_client_home%network/admin/配置tnsnames.ora,以服務名aa為例,用戶端和伺服器服務名及串連串需要保持一致。服務名的配置執行個體如:
| 代碼如下 |
複製代碼 |
a = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = helen)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = a) ) ) |
程式碼:
| 代碼如下 |
複製代碼 |
String connOra = "Data Source=a;User ID=a;password=a;Unicode=True"; OracleConnection conn = new OracleConnection(connOra); conn.Open(); if (conn.State == ConnectionState.Open) Response.Write("DataOracle.aspx conn open success"); else Response.Write("DataOracle.aspx conn open failure"); |
2.不安裝oracle用戶端,串連oracle
不需要配置tnsnames.ora,把主機、連接埠、資料庫ID(SID)寫入連接字串,其他串連同上。
新的連接字串為:
| 代碼如下 |
複製代碼 |
Data Source= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = helen)(PORT = 1521))) (CONNECT_DATA = (SID= a) ));User ID=a;password=a;Unicode=True |
公司用的是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位系統時,刷頁面發現錯誤提示是“未找到表或視圖”,我靠!然後就這樣發現了問題的根源:連接字串不對呀。然後換上System.Data.OracleClient也正常了。
經過測試發現另外一種寫法也是可以的:
| 代碼如下 |
複製代碼 |
<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"/> |
關於