標籤:
如何引用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();
}
串連Oracle的幾種方式