C#连接ORACLE出现乱码问题的解决方法
以前做过java项目,连接各种数据库都得心应手,最近接触c#的一个项目,连接SqlServer数据库倒也是很好用,但是遇到oracle数据库就萎了,于是搜索好多资料,有使用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”
报错:未注册数据提供程序!
于是继续搜索,网上说需要安装oracle相关连接组件,这就很麻烦了,不可能所有机子都安装这个组件
于是继续找解决方法,最后发现以下连接是可以的,也就是在使用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.我的电脑-属性-高级系统设置-环境变量-在系统变量下方点击新建–变量名:NLS_LANG 变量值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
方法三
make1828同学给出的解决方法
1:先查询oralce的字符编码:select userenv(‘language’) from dual;
2:在环境变量中设置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客户端:(可自行网上搜索下载)
5:需要的可用下载一个PLSQL工具