溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決C#連接ORACLE出現(xiàn)亂碼問題

發(fā)布時間:2021-10-08 09:57:28 來源:億速云 閱讀:121 作者:iii 欄目:開發(fā)技術

本篇內容主要講解“如何解決C#連接ORACLE出現(xiàn)亂碼問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何解決C#連接ORACLE出現(xiàn)亂碼問題”吧!

目錄
  • 方法一

  • 方法二

  • 方法三

  • 方法四

以前做過java項目,連接各種數(shù)據(jù)庫都得心應手,最近接觸c#的一個項目,連接SqlServer數(shù)據(jù)庫倒也是很好用,但是遇到oracle數(shù)據(jù)庫就萎了,于是搜索好多資料,有使用oracle.datamanager.dataaccess的,有System.Data.OracleClient.OracleConnection的,也有System.Data.OleDb.OdbcConnection連接的,但前兩種方式都試了,依舊如此亂碼,于是就試試最后一種:

方法一

連接字符串:

"Provider=oraoledb.oracle;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.10.10)(PORT = 1521)))(CONNECT_DATA = (SID = orcl))) ;User Id=user;Password=user"

報錯:未注冊數(shù)據(jù)提供程序!

于是繼續(xù)搜索,網(wǎng)上說需要安裝oracle相關連接組件,這就很麻煩了,不可能所有機子都安裝這個組件

于是繼續(xù)找解決方法,最后發(fā)現(xiàn)以下連接是可以的,也就是在使用System.Data.OracleClient.OracleConnection時候,不再提示注冊程序之類的, 問題終于解決了,查詢結果也不亂碼!

連接字符串:

"Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =
10.20.10.10
)(PORT = 1521)))(CONNECT_DATA = (SID = orcl))) ;User Id=lswen;Password=1169"

注意:Provider=MSDAORA.1; 而不是Provider=oraoledb.oracle;

方法二

1.打開注冊表:開始-運行-regedit

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1/OLEDB
在右側點鼠標右鍵--新建--字符串值--名稱改為:NLS_LANG 值設為:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

2.我的電腦-屬性-高級系統(tǒng)設置-環(huán)境變量-在系統(tǒng)變量下方點擊新建--變量名:NLS_LANG 變量值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK

方法三

make1828同學給出的解決方法

1:先查詢oralce的字符編碼:select userenv('language') from dual;

如何解決C#連接ORACLE出現(xiàn)亂碼問題

2:在環(huán)境變量中設置NLS_LANG變量:

如何解決C#連接ORACLE出現(xiàn)亂碼問題如何解決C#連接ORACLE出現(xiàn)亂碼問題

3:配置連接字符串:

Provider=OraOLEDB.Oracle;User ID=***;Password=***;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = ***)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))

4:安裝Oracle客戶端:(可自行網(wǎng)上搜索下載)

如何解決C#連接ORACLE出現(xiàn)亂碼問題

5:需要的可用下載一個PLSQL工具

可以到億速云下載即可 http://kemok4.com/softs/664139.html

方法四

最近我用程序讀取oracle數(shù)據(jù)庫中數(shù)據(jù)時發(fā)現(xiàn)中文全部是亂碼。于是我展開了一系列的辦法最終解決了此問題。

工作環(huán)境:服務器 windows 2003+ oracle。
服務器字符集 SIMPLIFIED CHINESE_CHINA.WE8DEC。
編程環(huán)境 VS2005,C#,PLSQL。

方案一:

利用System.Data.OracleClient.OracleConnection類訪問數(shù)據(jù)庫。

連接字符串:

"Data Source= (DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=lswen;Password=1169"

將本地字符集改為與服務器相同。

打開注冊表regdit:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEO 中NLS_LANG改為: SIMPLIFIED CHINESE_CHINA.WE8DEC。

這個方法簡直就像噩夢,根本解決不了,網(wǎng)上有很多人發(fā)表用這種方法。答案是片面的,如果服務器的字符集是: ZHS16GBK那么此法就可以解決。字符集WE8DEC是西歐字符集本身包含的漢字就不多,之所以它允許用存入漢字是因為它將一個漢字拆分為兩個字節(jié)存儲方式,其他中文字符集的客戶端無法直接還原為一個中文。所以必須保持客戶端與服務器一致-----這網(wǎng)上看到的不知道自己的理解是否對。

方案一 失敗。

方案二 :

利用System.Data.OleDb.OdbcConnection類訪問數(shù)據(jù)庫。

連接字符串:

"Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=lswen;Password=1169"

將本地字符集改為與服務器相同,方法同方案一相同。
這一下問題終于解決了。

強調連接字符串因該使用Provider=MSDAORA.1; 不能使用Provider=oraoledb.oracle;

方案二 成功了。

總結 :

不管是WE8DEC,還是其他一些西歐字符集都存在這樣的問題,用第二種方案應該都可以解決。

到此,相信大家對“如何解決C#連接ORACLE出現(xiàn)亂碼問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI