C#連接ORACLE出現(xiàn)亂碼問題的解決方法
以前做過(guò)java項(xiàng)目,連接各種數(shù)據(jù)庫(kù)都得心應(yīng)手,最近接觸c#的一個(gè)項(xiàng)目,連接SqlServer數(shù)據(jù)庫(kù)倒也是很好用,但是遇到oracle數(shù)據(jù)庫(kù)就萎了,于是搜索好多資料,有使用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"
報(bào)錯(cuò):未注冊(cè)數(shù)據(jù)提供程序!
于是繼續(xù)搜索,網(wǎng)上說(shuō)需要安裝oracle相關(guān)連接組件,這就很麻煩了,不可能所有機(jī)子都安裝這個(gè)組件
于是繼續(xù)找解決方法,最后發(fā)現(xiàn)以下連接是可以的,也就是在使用System.Data.OracleClient.OracleConnection時(shí)候,不再提示注冊(cè)程序之類的, 問題終于解決了,查詢結(jié)果也不亂碼!
連接字符串:
"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.打開注冊(cè)表:開始-運(yùn)行-regedit
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1/OLEDB
在右側(cè)點(diǎn)鼠標(biāo)右鍵--新建--字符串值--名稱改為:NLS_LANG 值設(shè)為:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
2.我的電腦-屬性-高級(jí)系統(tǒng)設(shè)置-環(huán)境變量-在系統(tǒng)變量下方點(diǎn)擊新建--變量名:NLS_LANG 變量值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
方法三
make1828同學(xué)給出的解決方法
1:先查詢oralce的字符編碼:select userenv('language') from dual;

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


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)上搜索下載)

5:需要的可用下載一個(gè)PLSQL工具
可以到腳本之家下載即可 http://www.dhdzp.com/softs/664139.html
方法四
最近我用程序讀取oracle數(shù)據(jù)庫(kù)中數(shù)據(jù)時(shí)發(fā)現(xiàn)中文全部是亂碼。于是我展開了一系列的辦法最終解決了此問題。
工作環(huán)境:服務(wù)器 windows 2003+ oracle。
服務(wù)器字符集 SIMPLIFIED CHINESE_CHINA.WE8DEC。
編程環(huán)境 VS2005,C#,PLSQL。
方案一:
利用System.Data.OracleClient.OracleConnection類訪問數(shù)據(jù)庫(kù)。
連接字符串:
"Data Source= (DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=lswen;Password=1169"
將本地字符集改為與服務(wù)器相同。
打開注冊(cè)表regdit:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEO 中NLS_LANG改為: SIMPLIFIED CHINESE_CHINA.WE8DEC。
這個(gè)方法簡(jiǎn)直就像噩夢(mèng),根本解決不了,網(wǎng)上有很多人發(fā)表用這種方法。答案是片面的,如果服務(wù)器的字符集是: ZHS16GBK那么此法就可以解決。字符集WE8DEC是西歐字符集本身包含的漢字就不多,之所以它允許用存入漢字是因?yàn)樗鼘⒁粋€(gè)漢字拆分為兩個(gè)字節(jié)存儲(chǔ)方式,其他中文字符集的客戶端無(wú)法直接還原為一個(gè)中文。所以必須保持客戶端與服務(wù)器一致-----這網(wǎng)上看到的不知道自己的理解是否對(duì)。
方案一 失敗。
方案二 :
利用System.Data.OleDb.OdbcConnection類訪問數(shù)據(jù)庫(kù)。
連接字符串:
"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"
將本地字符集改為與服務(wù)器相同,方法同方案一相同。
這一下問題終于解決了。
強(qiáng)調(diào)連接字符串因該使用Provider=MSDAORA.1; 不能使用Provider=oraoledb.oracle;
方案二 成功了。
總結(jié) :
不管是WE8DEC,還是其他一些西歐字符集都存在這樣的問題,用第二種方案應(yīng)該都可以解決。
- C#連接Oracle數(shù)據(jù)庫(kù)字符串(引入DLL)的方式
- C#連接Oracle數(shù)據(jù)庫(kù)使用Oracle.ManagedDataAccess.dll
- C#連接Oracle的方法實(shí)例總結(jié)
- C#連接Oracle數(shù)據(jù)庫(kù)的方法
- C#實(shí)現(xiàn)遠(yuǎn)程連接ORACLE數(shù)據(jù)庫(kù)的方法
- 深入分析C#連接Oracle數(shù)據(jù)庫(kù)的連接字符串詳解
- C#連接Oracle數(shù)據(jù)庫(kù)的實(shí)例方法
- C#利用ODP.net連接Oracle數(shù)據(jù)庫(kù)的操作方法
- C#使用Oracle.ManagedDataAccess.dll組件連接Oracle數(shù)據(jù)庫(kù)
相關(guān)文章
Oracle數(shù)據(jù)庫(kù)下載及安裝圖文操作步驟
本文將介紹Oracle數(shù)據(jù)庫(kù)下載及安裝等一系列步驟,需要了解的朋友可以參考下2012-12-12
怎么才能限制SQL Server只能讓指定的機(jī)器連接
怎么才能限制SQL Server只能讓指定的機(jī)器連接...2007-03-03
oracle join on 數(shù)據(jù)過(guò)濾問題
因?yàn)樵贔OR .. IN () LOOP 游標(biāo)中使用 所以不能采用下面的查詢語(yǔ)句做游標(biāo)2009-07-07
Maven中央倉(cāng)庫(kù)正式成為Oracle官方JDBC驅(qū)動(dòng)程序組件分發(fā)中心(推薦)
這篇文章主要介紹了Maven中央倉(cāng)庫(kù)正式成為Oracle官方JDBC驅(qū)動(dòng)程序組件分發(fā)中心,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Navicat Premium中Oracle創(chuàng)建主鍵自增的方法
這篇文章主要介紹了Navicat Premium中Oracle創(chuàng)建主鍵自增的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Oracle 計(jì)算時(shí)間格式平均值的sql 語(yǔ)句
這篇文章主要介紹了Oracle 計(jì)算時(shí)間格式平均值的sql 語(yǔ)句,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
安裝Oracle時(shí)出現(xiàn)環(huán)境變量Path的值大于1023的解決辦法
這篇文章主要介紹了安裝Oracle時(shí)出現(xiàn)環(huán)境變量Path的值大于1023的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-12-12
oracle iSQL*PLUS配置設(shè)置圖文說(shuō)明
iSQL*PLUS是從ORACLE 9i開始提供的新功能,是SQL*PLUS的Web形式(ORACLE 11g已經(jīng)不支持)是基于三層結(jié)構(gòu)設(shè)計(jì)的,需要的朋友可以了解下2012-12-12

