在未安裝Oracle數(shù)據(jù)庫客戶端的前提下,,C#通過使用ADO的方式遠程訪問服務器,會出現(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版本的對應下載,,根據(jù)不同需求自己選擇。
我的系統(tǒng)環(huán)境如下: 數(shù)據(jù)庫服務器:WindowsServer2008x64 數(shù)據(jù)庫服務端:oracle11.2.0.1.0 客戶端系統(tǒng):Windows7x64 因此我選擇下載了instantclient-basic-win-x86-64-11.2.0.1.0.zip 只需在客戶端將其解壓即可(位置任意),,我解壓在d盤根目錄,生成一個文件夾d:\instantclient_11_2(然后將其修改成oracleclient,,根據(jù)自己需要修改),,里面就是連接遠程數(shù)據(jù)庫要用到的dll文件。 第二步:配置環(huán)境變量
1,、 在PATH變量中增加【;D:\oracleclient】,,即就是剛才我們解壓Instant Client所在的目錄; 2,、增加以下三個變量: NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK TNS_ADMIN= D:\oracleclient LD_LIBRARY_PATH= D:\oracleclient 第三步:配置tnsnames.ora文件 在 D:\oracleclient目錄中增加一個tnsnames.ora文件,,內(nèi)容為訪問數(shù)據(jù)庫的配置信息。具體步驟為:新建一個txt文檔,,然后將一下內(nèi)容復制進去,,另存為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ù)庫實際信息進行修改。 此時在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(); } } }
運行結(jié)果:
|