利用System.Data.OleDb.OdbcConnection类访问数据库。
连接字符串:"Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=****;Password=****"
将本地字符集改为与服务器相同,方法同方案一相同。
这一下问题终于解决了。
强调连接字符串因该使用Provider=MSDAORA.1; 不能使用Provider=oraoledb.oracle;
通过OleDB连接Oracle数据库,一般有两种provider
A:provider=MSDAORA.1
B:provider=OraOLEDB.Oracle
第一种为微软公司的oracle组件,第二种为oracle的访问组件。
Oracle数据库经常使用的两种字符集
C:英文:SIMPLIFIED CHINESE_CHINA.US7ASCII
D:中文:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
A与C、D搭配,数据读写没有乱码问题,如果出现乱码,则修改系统级(非用户级)的环境变量nls_lang为数据库所使用的字符集,重启电脑即可。
缺点:不支持long/Clob/Blob大字段。
B支持大字段,与D搭配最为完美。如果BC搭配使用,读出无乱码,写入为乱码,做为where条件传进去的中文参数为乱码。无法使用。如果数据库字符集为C,则只能使用A。如果要读取大字段,只得使用B新建连接。