我平时装Oracle时一般都是装GBK字符集,而今天遇到一家装了Ascii的Oracle,导致我程序执行查询语句时报错:0RA-01843: ?????
而我直接在plsql里面跑查询语句时是没问题的(客户端Oracle的字符集和服务端的保持一致)。
方法一:我的程序是用”Oracle.ManagedDataAccess“连接的数据库,这个类库的好处是不需要安装Oracle客户端,但是他不会解析其它类型的字符集。
方法二:后来我换成”System.Data.OracleClient“,这个是要装客户端,是最终通过客户端查询的,想着既然plsql直接跑语句没有问题,那肯定用这个也没有问题了(前提是客户端Oracle的字符集需要和服务端的保持一致),换成这个之后确实没有报错了,但是查询出来的DaTaTable是空的。
方法三:最后我换成了”System.Data.OleDb.OdbcConnection“,终于不报错,数据能查出来了。
连接字符串是:Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.5)(PORT = 1521)))(CONNECT_DATA = (Server_name = Health))) ;User Id=jjjjj;Password=kkkkk
感觉用最后一种方法遇到什么样的字符集都能解决。