日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在C#中,遠程連接Oracle數(shù)據(jù)庫(不安裝客戶端,無需多余配置)

 zp_0409 2016-08-06

由于項目需要,現(xiàn)需要向遠程Oracle數(shù)據(jù)庫插入數(shù)據(jù)。由于后期可能無法在部署程序的電腦上安裝oracle客戶端,網(wǎng)上也有一些解決辦法,通常是要下載對應版本的Oracle Instant Client,將訪問Oracle需要的部分Dll文件拷貝到客戶端本地,然后通過配置環(huán)境變量或修改注冊表的方式,來達到快速安裝客戶端的目的,如果后期部署程序在虛擬空間時,配置環(huán)境變量或修改注冊表或許不可行。這里提供一種簡單、無需安裝和多余配置的方法,適用于.NET C#。

本方法通過程序內(nèi)集成Oracle客戶端,下面是這種方法的具體實現(xiàn):

1.從Oracle官網(wǎng)上下載對應版本的Oracle Instant Client,以下是官網(wǎng)鏈接
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

但是由于我下載其中的Win32版本的文件不全,因此又通過查找另外下載了一些文件,現(xiàn)已把我在32位機器上測試遠程連接Oracle 10g數(shù)據(jù)庫通過的完整文件上傳到csdn,鏈接為http://download.csdn.net/detail/xiaohu_2012/5999699,壓縮包包括如下文件:

classes12.jar oci.dll
ocijdbc10.dll
ociw32.dll
ojdbc14.jar
Oracle.DataAccess.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
OraOps11w.dll

其中OraOps11w.dll與Oracle.DataAccess.dll需要配套。

2.在你的工程目錄里新建一個文件夾Oracle(名字和位置隨便定),將上述文件拷貝到里邊,并在Visual Studio中添加這個文件夾及文件們。保證可以在解決方案中看到它們。

3.在Visual Studio IDE 的解決方案資源管理器中,打開Oracle文件夾,選中里邊所有的文件,在“屬性”“復制到輸出目錄”里設置“如果較新則復制”,這樣在編譯或者發(fā)布程序時,Oracle文件夾會隨著發(fā)布到exe所在的地方,部署的時候就不會出現(xiàn)找不到Oracle庫的情況。

4.按照網(wǎng)上的大多數(shù)教程,這個時候就需要配置Windows環(huán)境變量了。其實這一步并不是必須的,因為考慮到不同的客戶環(huán)境,有可能用戶沒有權(quán)限在他的計算機上操作這些,那么我們可以把設置Oracle環(huán)境變量放到程序里來做。這就需要在使用Oracle連接之前,添加如下代碼:

//取得oracle驅(qū)動文件夾的位置,也就是放oci.dll的地方 string oraclePath = System.Windows.Forms.Application.StartupPath + @'\oracle'; //設置環(huán)境變量“PATH”,寫入oracle驅(qū)動所在的文件夾 //第三個參數(shù)表示這個PATH只在當前進程起作用,不會修改電腦本身。 Environment.SetEnvironmentVariable('PATH', oraclePath,EnvironmentVariableTarget.Process); //設置Oracle在通訊過程中使用的語言和字符集。 //我的項目用的是上面的字符集,對應到你的項目,可用SQL語句去oracle數(shù)據(jù)庫中查詢。 //這個語言和字符集一定要和服務器一致,否則可能會出現(xiàn)亂碼甚至無法連接。 Environment.SetEnvironmentVariable('NLS_LANG', 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', EnvironmentVariableTarget.Process);

補充說明,可以用以下SQL語句查詢字符集:

select userenv('language') from dual;查詢服務端字符集,用來設置上面的參數(shù)。 select * from nls_database_parameters;//服務器字符集 select * from nls_instance_parameters;//ora文件定義字符集 select * from nls_session_parameters;//會話字符集

5.理論上,經(jīng)過上面的設置,你的程序就可以使用內(nèi)置到exe目錄下的Oracle驅(qū)動了,這里要注意的還有就是連接數(shù)據(jù)庫的方式,上面的修改并不能保證你可以使用tns名來連接,因此連接字符串要做如下修改:

'Persist Security Info=True;User ID=數(shù)據(jù)庫用戶名;Password=密碼;Unicode=True;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服務器IP地址)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=服務器上全局數(shù)據(jù)庫的服務名)))'
這個主要是把'Data Source'這部分直接用TCP/IP字符串方式替換了(通常Data Source是寫tns名稱的)

6.Ok,運行程序,連接成功!

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多