連接Oracle的幾種方式


如何引用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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM