在未安裝Oracle數(shù)據(jù)庫客戶端的前提下,C#通過使用ADO的方式遠(yuǎn)程訪問服務(wù)器,會(huì)出現(xiàn):“System.Data.OracleClient 需要 Oracle 客戶端軟件 8.1.7 或更高版本”問題,本文提供一種方式解決該問題。 具體步驟步驟如下: 第一步:下載Instant Client 文件 Oracle官方網(wǎng)站提供了Instant Client文件的下載,下載地址為:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,里面提供了支持不同操作系統(tǒng)和不同Oracle版本的對(duì)應(yīng)下載,根據(jù)不同需求自己選擇。
我的系統(tǒng)環(huán)境如下: 數(shù)據(jù)庫服務(wù)器:WindowsServer2008x64 數(shù)據(jù)庫服務(wù)端:oracle11.2.0.1.0 客戶端系統(tǒng):Windows7x64 因此我選擇下載了instantclient-basic-win-x86-64-11.2.0.1.0.zip 只需在客戶端將其解壓即可(位置任意),我解壓在d盤根目錄,生成一個(gè)文件夾d:\instantclient_11_2(然后將其修改成oracleclient,根據(jù)自己需要修改),里面就是連接遠(yuǎn)程數(shù)據(jù)庫要用到的dll文件。 第二步:配置環(huán)境變量
1、 在PATH變量中增加【;D:\oracleclient】,即就是剛才我們解壓Instant Client所在的目錄; 2、增加以下三個(gè)變量: NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK TNS_ADMIN= D:\oracleclient LD_LIBRARY_PATH= D:\oracleclient 第三步:配置tnsnames.ora文件 在 D:\oracleclient目錄中增加一個(gè)tnsnames.ora文件,內(nèi)容為訪問數(shù)據(jù)庫的配置信息。具體步驟為:新建一個(gè)txt文檔,然后將一下內(nèi)容復(fù)制進(jìn)去,另存為tnsnames.ora即可。 ORCL= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.107) (PORT = 1521) ) ) (CONNECT_DATA = (SERVICE_NAME = lottery) ) ) 其中的HOST、PORT、SERVICE_NAME需要根據(jù)數(shù)據(jù)庫實(shí)際信息進(jìn)行修改。 此時(shí)在C#代碼中的連接字符串可以按如下方式定義: String conn =@'DataSource=ORCL;Persist Security Info=True;User Id=用戶名;Password=密碼';
否則,如果想省略第三步,在C#代碼中的連接字符串必須按如下方式定義:
String conn =String.Format('Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(HOST = 192.168.1.107)(PORT = 1521))) (CONNECT_DATA=(SERVICE_NAME = lottery) ) );User Id=用戶名;Password=密碼;'); 第四步:重啟系統(tǒng) C#代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.OracleClient; namespace TestOracle { class Program { static void Main(string[] args) { String conn = @'Data Source=ORCL;Persist Security Info=True;User Id=testdb;Password=manager'; String conn1 = String.Format('Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.107)(PORT = 1521))) (CONNECT_DATA =(SERVICE_NAME = lottery) ) );User Id=testdb;Password=manager;'); OracleConnection oc = new OracleConnection(conn); try { oc.Open(); OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = 'select sysdate from dual'; OracleDataReader odr = cmd.ExecuteReader(); while (odr.Read()) { Console.WriteLine(odr.GetDateTime(0).ToString()); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { oc.Close(); } Console.Read(); } } }
運(yùn)行結(jié)果: 
|