/// <summary>
/// Oracle 的數據庫連接字符串.
/// </summary>
private const String connString =
@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.210)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=TEST;Password=TEST123";
那個 192.168.1.210 是 Oracle 數據庫服務器的 IP 地址
1521 是 默認的端口號
SERVICE_NAME=ORCL 意思是 那個 Oracle 數據庫服務是 ORCL
后面就是 用戶名 密碼了。
在.NET中使用System.Data.OracleClient庫連接Oracle數據庫的步驟
1.下載並安裝Instant Client
Instant Client可以在Oracle官方網站下載到
對於Windows,Instant Client有三種版本:
1)適用於 Microsoft Windows(32位)的 Instant Client
2)適用於 Microsoft Windows(64位)Itanium的 Instant Client
3)適用於 Microsoft Windows(x64)的 Instant Client
可以通過在我的電腦上單擊右鍵菜單中的屬性中查看到自己電腦的處理器信息
由於我的電腦是Win7 64位系統,因此我下載了第三個包
下載完畢后,解壓縮並將里面的bin目錄的地址添加到環境變量path中。
再在環境變量中添加以下屬性:
(我把解壓縮的路徑放到了D盤,解壓縮后的文件夾名為instantclient_12_1)
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
TNS_ADMIN=D:\instantclient_12_1
LD_LIBRARY_PATH=D:\instantclient_12_1
2.使用Xshell4遠程連接安裝有Oracle的RedHat系統
需要輸入以下項:
1)Name:自己起個名字
2)Protocol:選擇SSH
3)Host:目標主機IP
4)Port Number:端口號(22)
5)登錄的用戶名/密碼
附:Linux中登錄數據庫的命令為
sqlplus 用戶名/口令@數據庫名
3.獲取連接字符串
查找ORACLE安裝地址
Linux命令:echo $ORACLE_HOME
tnsnames.ora位於目錄
$ORACLE_HOME\network\admin\
用vim打開tnsnames.ora后,發現Oracle數據庫的配置如下:
xtcsjk = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 171.0.0.132)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb) ) )
根據這個文件,就可以寫出連接這個Oracle數據庫的連接字符串了
Data Source= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS= (PROTOCOL=TCP) (HOST=171.0.0.132) (PORT=1521) ) ) (CONNECT_DATA= (SERVICE_NAME=TESTDB) ) ); Persist Security Info=True; User Id=用戶名; Password=密碼
4.程序代碼
注:運行下面這段代碼,需要
1)手動添加對庫System.Data.OracleClient的引用
2)在程序集→右鍵→屬性→生成中,把目標平台由AnyCPU改為x64
否則會報異常BadImageFormatException(兼容性問題)
3)如果沒有完成Instant Client的安裝或環境變量的配置,運行時會報異常信息:
System.Data.OracleClient 需要 Oracle 客戶端軟件 version 8.1.7 或更高版本

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //Method1函數調用的庫,需要手動添加引用 using System.Data.OracleClient; namespace OracleTest { class Program { //從Oracle數據庫中讀取時間信息 static void ReadFromOracleTest() { string conn = string.Concat( @"Data Source=", @" (DESCRIPTION=", @" (ADDRESS_LIST=", @" (ADDRESS=", @" (PROTOCOL=TCP)", @" (HOST=171.0.0.132)", @" (PORT=1521)", @" )", @" )", @" (CONNECT_DATA=", @" (SERVICE_NAME=TESTDB)", @" )", @" );", @"Persist Security Info=True;", @"User Id=用戶名;", @"Password=密碼" ); //OracleConnection 被標注為已過時 OracleConnection oc = new OracleConnection(conn); try { oc.Open(); //OracleCommand 被標注為已過時 OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = "select sysdate from dual"; OracleDataReader odr = cmd.ExecuteReader(); while (odr.Read()) { Console.WriteLine(odr.GetOracleDateTime(0).ToString()); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { oc.Close(); } } static void Main(string[] args) { ReadFromOracleTest(); Console.ReadLine(); } } }
5.運行示例