VS2010中用微軟自帶的System.Data.OracleClient來連線Oracle資料庫

風靈使發表於2018-07-31

由於微軟在.Net框架4.0中已經決定撤銷使用System.Data.OracleClient,造成在VS2010中無法連線Oracle資料庫,但它還依舊存在於.Net架構中,我們可以通過自己引用

C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.OracleClient.dll 來獲得對Oracle資料庫的支援。

方法:

1、在VS2010中開啟[解決方案管理器]--右擊[引用]--[新增引用]

2、選擇[瀏覽]找到“C:\Windows\Microsoft.NET\Framework\v2.0.50727”目錄,在下面選擇System.Data.OracleClient.dll之後就可以在程式編輯視窗使用using System.Data.OracleClient

另外:微軟決定撤銷System.Data.OracleClient內容如下:

對於那些開發.Net應用程式而資料庫又是Oracle的人來說,這則新聞顯得特別有意義,微軟正打算將Oracle資料提供程式從ADO.NET路線圖中移除。

微軟決定撤銷System.Data.OracleClient是因為有相當數量的MVP都傾向於選擇第三方Oracle資料提供程式,負責 ADO.NET OracleClient的產品經理Himanshu VasishthADO.NET團隊部落格文章中宣佈了這一決定。

但在.Net框架4.0中微軟將會繼續支援System.Data.OracleClient,但會被標記為“不宜使用”,根據Vasishth的說法,這對現有的應用程式沒有任何影響,它們將會按預期運轉得很好。

他在文章中提到“使用OracleClient開發新的應用程式仍然是可行的,但在.Net 4.0中編譯時會彈出一個警告對話方塊,編譯好後,執行時不會再彈出警告對話方塊,我們強烈建議使用者使用我們合作伙伴的ADO.NET Provider for Oracle代替微軟OracleClient進行新應用程式的開發”。

第三方提供Oracle資料提供程式的有DataDirectDevart科技公司,此外還有Oracle公司的資料提供程式,叫做Oracle Data Provider for .NET (ODP.NET),這些都是很流行的Oracle資料庫提供程式。

位於紐約的新技術公司twentysix執行長 Andrew Brust在一封電子郵件中說“Oracle自身對ADO.NET的支援以及Visual Studio本身已經被人們普遍看好,Oracle公司有一個專職的ADO.NET團隊,他們已經做得非常好了”。

微軟最有價值專家本傑明認為微軟這個決定非常有意義,微軟為社麼要卑躬屈膝支援連線到競爭對手的資料庫呢?特別是有調查資料顯示微軟的客戶都傾向於轉向Oracle,微軟肯定會不爽。同時,這也省去了微軟.NetOracle的版本控制或效能問題。

微軟表示將繼續提供bug修復和關鍵更新,但這一切都僅限於.Net 框架4.0中,以後就難說了


連線oracle資料庫異常System.Data.OracleClient 需要 Oracle 客戶端軟體 8.1.7 或更高版本

本人在用公司用C#寫的服務連線資料庫oracle 時,報出上面的錯誤:連線oracle資料庫異常System.Data.OracleClient 需要 Oracle 客戶端軟體 8.1.7 或更高版本。在網上查了好多,試了都沒有用,但是通過網上查詢,說是找不到oracleoci.dll檔案,故在系統環境配置中,PATH中加上我自己oracle client的安裝路徑:D:\app\admin\product\11.2.0\client_1\BIN; 即可,如果PATH中之前本來有內容,則在D:\app\admin\product\11.2.0\client_1\BIN此目錄前加上;

一、點選 “高階系統設定”;

二、點選環境變數

三、編輯修改
這裡寫圖片描述


asp.net 連線oracle,報錯誤。“System.Data.OracleClient 需要 Oracle 客戶端軟體 8.1.7 或更高版本。

使用Oracle資料庫不一定要安裝客戶端

System.Data.OracleClient 需要 Oracle 客戶端軟體 8.1.7 或更高版本。

解決方法

1.下載instantclient_11_2,解壓到任意目錄下
這裡寫圖片描述

2.在配置一下環境變數。

系統變數:在Path中,加入dll的路徑;eg:D:\Program Files\PremiumSoft\Navicat Premium\instantclient_11_2

使用者變數:加一個ORACLE_HOME,也是這個路徑;

3.重啟電腦(重要)

1.Navicat Premium 配置連線Oracle 資料庫,

可能出現的錯誤:

  1.連線資料庫`cannot load OCI DLL,193`

  1.還有一個可能就是`126`的錯誤,都是這個`oci.dll`問題導致

這裡寫圖片描述


C#實現不安裝Oracle客戶端訪問遠端伺服器資料

在未安裝Oracle資料庫客戶端的前提下,C#通過使用ADO的方式遠端訪問伺服器,會出現:“System.Data.OracleClient 需要 Oracle 客戶端軟體 8.1.7 或更高版本”問題,本文提供一種方式解決該問題。
具體步驟步驟如下:

第一步:下載Instant Client 檔案

Oracle官方網站提供了Instant Client檔案的下載,下載地址為:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,裡面提供了支援不同作業系統和不同Oracle版本的對應下載,根據不同需求自己選擇。

我的系統環境如下:

資料庫伺服器:WindowsServer2008x64

資料庫服務端:oracle11.2.0.1.0

客戶端系統:Windows7x64

因此我選擇下載了instantclient-basic-win-x86-64-11.2.0.1.0.zip
只需在客戶端將其解壓即可(位置任意),我解壓在d盤根目錄,生成一個資料夾d:\instantclient_11_2(然後將其修改成oracleclient,根據自己需要修改),裡面就是連線遠端資料庫要用到的dll檔案。

第二步:配置環境變數

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檔案,內容為訪問資料庫的配置資訊。具體步驟為:新建一個txt文件,然後將一下內容複製進去,另存為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需要根據資料庫實際資訊進行修改。
說明,以下需要根據實際情況修改:

HOST = 伺服器地址IP 或伺服器名稱

PORT = 伺服器埠號,預設為“1521

SERVICE_NAME = 伺服器資料庫服務的名字,預設為:”orcl“

此時在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=密碼;");

第四步:重啟系統

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();
        }
    }
}

執行結果:
這裡寫圖片描述

相關文章