如何引用Data.OracleClient.dll
由於從.net 4.0之后,微軟將OracleClient.dll從框架里去除了,所以要使用,需要在VS2010里面去把項目的.net框架從.net 4.0 改成3.5,解決方案上->引用->添加引用,然后在.NET下就可以找到System.Data.OracleClient.dll,點擊確定,就OK了。
這下總可以用了吧,其實噩耗才開始:
一:通過System.Data.OracleClient(需要安裝Oracle客戶端並配置tnsnames.ora)
本地使用Oracle是指在安裝Oracle數據庫的主機中連接和使用Oracle數據庫。從安全性和負載均衡的角度考慮,這種方式是不可取的。這里僅作為實驗使用。
本地連接的代碼與遠程連接實際上沒有什么分別,只不過其data source指向服務器端的客戶網絡服務名。對於本文的數據庫安裝,它指向E:\Oracle_Server\oracle\ora92\network\admin\tnsnames.ora文件中所定義的網絡服務名(有關內容請參考“Oracle客戶端的安裝與遠程連接配置”一文)。
對於這種本地連接方式,在服務器端不能存在獨立安裝的客戶端工具,否則data source只會去匹配獨立客戶端的tnsnames.ora文件,即使找不到對應的網絡服務名,也不會再去匹配服務器端的服務名。這不知是.Net組件的設計錯誤,還是故意為之,以鼓勵遠程連接和使用Oracle。
建立連接的主要代碼如下:
......
using System.Data.OracleClient;
......
//這里的“remotedb”對應於“Oracle客戶端的安裝與遠程連接配置”一文中配置的客戶端網絡服務名
OracleConnection conn= new OracleConnection("data source=remotedb;User Id=scott;Password=scott;"); conn.Open(); ......
1. 添加命名空間System.Data.OracleClient引用
2. using System.Data.OracleClient;
3.
string connString = "User ID=IFSAPP;Password=IFSAPP;Data Source=RACE;"; OracleConnection conn = new OracleConnection(connString); try { conn.Open(); MessageBox.Show(conn.State.ToString()); } catch (Exception ex) { ShowErrorMessage(ex.Message.ToString()); } finally { conn.Close(); }
二:通過System.Data.OracleClient(需要安裝Oracle客戶端不需配置tnsnames.ora)
使用客戶端網絡服務名連接Oracle
基於業務邏輯與數據庫實體的分層需要,一般要求在不同於Oracle數據庫主機的客戶端機器連接和使用Oracle數據庫。這種情況要么是通過C/S應用程序的客戶端訪問數據庫的情況;要么是在B/S應用程序中,在WEB服務器端遠程連接Oracle數據庫服務器。
通過客戶端網絡服務名遠程連接Oracle,要求在客戶端機器中安裝Oracle客戶端工具(安裝類型可以不必選擇“管理員”模式,而只需要安裝運行時支持即可,為應用程序提供基本的網絡服務配置工具等)。
建立連接的語句比較簡單,關鍵點為data source的設置。這里的data source不像SqlServer連接字串中指的是數據庫名稱,而是指客戶端網絡服務名(相關內容請參考前面有關客戶端安裝的文章)。對於本文的Oracle安裝來說,data source對應着E:\Oracle_Client\oracle\ora92\network\admin\tnsnames.ora配置文件中的網絡服務名(出於方便試驗的原因,數據庫與獨立的客戶端工具分別安裝在了同一台機器的不同目錄)。在具體實施連接時,將根據data source的值去該客戶網絡服務配置文件中查找對應項,以獲取數據庫服務器主機地址、端口、全局數據庫名等連接信息。
1. 添加命名空間System.Data.OracleClient引用
2. using System.Data.OracleClient;
3.
string connString = "User ID=system;Password=123;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))"; using (OracleConnection conn = new OracleConnection(connString)) { conn.Open(); using (OracleCommand cmd = new OracleCommand("select * from student", conn)) { OracleDataAdapter sdat = new OracleDataAdapter(cmd); DataSet ds = new DataSet(); sdat.Fill(ds,"p"); dgvData.DataSource=ds.Tables["p"]; } }
三:通過System.Data.OleDb和微軟公司的Oracle驅動
1. 添加命名空間System.Data.OracleClient引用
2. using System.Data.OleDb;
3.
string connString = "Provider=MSDAORA.1;User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))"; OleDbConnection cnn = new OleDbConnection(connString); try { conn.Open(); MessageBox.Show(conn.State.ToString()); } catch (Exception ex) { ShowErrorMessage(ex.Message.ToString()); } finally { conn.Close(); }
備注:
a.XP操作系統已經安裝了微軟公司的Oracle驅動C:\Program Files\Common Files\System\Ole DB\msdaora.dll
b.該驅動需要Oracle客戶端的三個文件(oraocixe10.dll、oci.dll、ociw32.dll)放在System32下即可
四:使用ODP連接
1. 下載安裝ODP.NET(http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html)
2. 安裝完全成后會產生一序列文件。
3. 找到這個安裝目錄,打開文件夾%ORACLE_HOME%\Network\Admin在這個下面建立一個tnsnames.ora的文件,其內容可以參考其下的Sample目錄下面的配置
Oracle.RACE =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=127.0.0.1)
(PORT=1521)
)
)
(CONNECT_DATA=
(SID=RACE)
(SERVER=DEDICATED)
)
)
Oracle.RACE為連接字符串名稱,可以隨便取。等號后面的字符串可以在Enterprise Manager Console工具中連接數據庫后的TNS描述符中拷過來
4. 引用Oracle.DataAccess命名空間
5. using Oracle.DataAccess.Client;
6. 示例代碼:
string connString = "DATA SOURCE=Oracle.RACE;PERSIST SECURITY INFO=True;USER ID=IFSAPP;password=IFSAPP";
OracleConnection conn = new OracleConnection(connString);
try
{
conn.Open();
OracleCommand cmd = new OracleCommand(cmdText,conn);
OracleDataReader reader = cmd.ExecuteReader();
this.DataGridView1.DataSource = reader;
this.DataGridView1.DataBind();
}
catch (Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
五:使用第三方驅動
第三方驅動有 Devart,下載驅動 http://www.devart.com/dotconnect/oracle/,但是是商業版,需要購買許可或破解
連接格式 User ID=myUsername;Password=myPassword;Host=ora;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;
1. 引用Devart.Data.Oracle命名空間
2. using Devart.Data.Oracle;
3.
OracleConnection conn = new OracleConnection();
conn.ConnectionString = "";
conn.Unicode = true;
conn.UserId = "IFSAPP";
conn.Password = "IFSAPP";
conn.Port = 1521;
conn.Server = "127.0.0.1";
conn.Sid = "RACE";
try
{
conn.Open();
//execute queries, etc
}
catch (Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}