C#遠程鏈接Oracle數據庫(經過System.Data.OracleClient)

在.NET中使用System.Data.OracleClient庫鏈接Oracle數據庫的步驟sql

1.下載並安裝Instant Clientshell

Instant Client能夠在Oracle官方網站下載到數據庫

對於Windows,Instant Client有三種版本:vim

1)適用於 Microsoft Windows(32位)的 Instant Client函數

2)適用於 Microsoft Windows(64位)Itanium的 Instant Client網站

3)適用於 Microsoft Windows(x64)的 Instant Clientspa

能夠經過在個人電腦上單擊右鍵菜單中的屬性中查看到本身電腦的處理器信息code

因爲個人電腦是Win7 64位系統,所以我下載了第三個包orm

下載完畢後,解壓縮並將裏面的bin目錄的地址添加到環境變量path中。字符串

再在環境變量中添加如下屬性:

(我把解壓縮的路徑放到了D盤,解壓縮後的文件夾名爲instantclient_12_1)

NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

TNS_ADMIN=D:\instantclient_12_1

LD_LIBRARY_PATH=D:\instantclient_12_1

2.使用Xshell4遠程鏈接安裝有Oracle的RedHat系統

須要輸入如下項:

1)Name:本身起個名字

2)Protocol:選擇SSH

3)Host:目標主機IP

4)Port Number:端口號(22)

5)登陸的用戶名/密碼

附:Linux中登陸數據庫的命令爲

sqlplus 用戶名/口令@數據庫名

3.獲取鏈接字符串

查找ORACLE安裝地址

Linux命令:echo $ORACLE_HOME

tnsnames.ora位於目錄

$ORACLE_HOME\network\admin\

用vim打開tnsnames.ora後,發現Oracle數據庫的配置以下:

xtcsjk =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 171.0.0.132)(PORT = 1521))
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = testdb)
        )
     )

根據這個文件,就能夠寫出鏈接這個Oracle數據庫的鏈接字符串了

Data Source=
    (DESCRIPTION=
        (ADDRESS_LIST=
            (ADDRESS=
                (PROTOCOL=TCP)
                (HOST=171.0.0.132)
                (PORT=1521)
            )
        )
        (CONNECT_DATA=
            (SERVICE_NAME=TESTDB)
        )
    );
Persist Security Info=True;
User Id=用戶名;
Password=密碼

4.程序代碼

注:運行下面這段代碼,須要

1)手動添加對庫System.Data.OracleClient的引用

2)在程序集→右鍵→屬性→生成中,把目標平臺由AnyCPU改成x64

不然會報異常BadImageFormatException(兼容性問題)

3)若是沒有完成Instant Client的安裝或環境變量的配置,運行時會報異常信息:

System.Data.OracleClient 須要 Oracle 客戶端軟件 version 8.1.7 或更高版本

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//Method1函數調用的庫,須要手動添加引用
using System.Data.OracleClient;

namespace OracleTest
{
    class Program
    {
        //從Oracle數據庫中讀取時間信息
        static void ReadFromOracleTest()
        {
            string conn = string.Concat(
                @"Data Source=",
                @"    (DESCRIPTION=",
                @"        (ADDRESS_LIST=",
                @"            (ADDRESS=",
                @"                (PROTOCOL=TCP)", 
                @"                (HOST=171.0.0.132)",
                @"                (PORT=1521)",
                @"            )",
                @"        )",
                @"        (CONNECT_DATA=",
                @"            (SERVICE_NAME=TESTDB)",
                @"        )",
                @"    );",
                @"Persist Security Info=True;",
                @"User Id=用戶名;",
                @"Password=密碼"
                );

            //OracleConnection 被標註爲已過期
            OracleConnection oc = new OracleConnection(conn);

            try
            {
                oc.Open();
                //OracleCommand 被標註爲已過期
                OracleCommand cmd = oc.CreateCommand();
                cmd.CommandText = "select sysdate from dual";
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Console.WriteLine(odr.GetOracleDateTime(0).ToString());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                oc.Close();
            }
        }

        static void Main(string[] args)
        {
            ReadFromOracleTest();
            Console.ReadLine();
        }
    }
}

5.運行示例

END

相關文章
相關標籤/搜索