VS2010中用微軟自帶的System.Data.OracleClient來連線Oracle資料庫
由於微軟在.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 Vasishth
在ADO.NET
團隊部落格文章中宣佈了這一決定。
但在.Net框架4.0中微軟將會繼續支援System.Data.OracleClient
Vasishth
的說法,這對現有的應用程式沒有任何影響,它們將會按預期運轉得很好。
他在文章中提到“使用OracleClient
開發新的應用程式仍然是可行的,但在.Net 4.0
中編譯時會彈出一個警告對話方塊,編譯好後,執行時不會再彈出警告對話方塊,我們強烈建議使用者使用我們合作伙伴的ADO.NET Provider for Oracle
代替微軟OracleClient
進行新應用程式的開發”。
第三方提供Oracle
資料提供程式的有DataDirect
和Devart
科技公司,此外還有Oracle
公司的資料提供程式,叫做Oracle Data Provider for .NET (ODP.NET)
Oracle
資料庫提供程式。
位於紐約的新技術公司twentysix執行長 Andrew Brust
在一封電子郵件中說“Oracle
自身對ADO.NET
的支援以及Visual Studio
本身已經被人們普遍看好,Oracle
公司有一個專職的ADO.NET
團隊,他們已經做得非常好了”。
微軟最有價值專家本傑明認為微軟這個決定非常有意義,微軟為社麼要卑躬屈膝支援連線到競爭對手的資料庫呢?特別是有調查資料顯示微軟的客戶都傾向於轉向Oracle
,微軟肯定會不爽。同時,這也省去了微軟.Net
到Oracle
的版本控制或效能問題。
微軟表示將繼續提供bug
修復和關鍵更新,但這一切都僅限於.Net
框架4.0中,以後就難說了
連線oracle
資料庫異常System.Data.OracleClient
需要 Oracle
客戶端軟體 8.1.7
或更高版本
本人在用公司用C#
寫的服務連線資料庫oracle
時,報出上面的錯誤:連線oracle
資料庫異常System.Data.OracleClient
需要 Oracle
客戶端軟體 8.1.7 或更高版本。在網上查了好多,試了都沒有用,但是通過網上查詢,說是找不到oracle
的oci.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
檔案
我的系統環境如下:
資料庫伺服器: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();
}
}
}
執行結果: