c#访问Oracle,本来是很常见的,但是在实际的工作中确实遇到了各种各样的异常,特此分析并总结如下,以便以后查找方便:
数据库的字符集常用的两种方式:
provider=MSDAORA.1是微软写的驱动
使用MSDAORA.1驱动的OLEDB连接,不管数据库字符集是美国编码US7ASCII还是中国编码ZHS16GBK,都不会出现乱码,若出现乱码,可能是本地Oracle与服务端Oracle字符集不相同导致的。需要修改注册表nls_lang变量。但是,在X64位Oracle上使用MSDAORA.1时,会出现未在本地计算机上注册“MSDAORA.1”提供程序的问题。也就是说MSDAORA.1在64位的Oracle支持不好。
使用ORAOLEDB.ORACLE驱动的OLEDB连接,对中国编码ZHS16GBK支持很好。若Oracle字符集是美国编码US7ASCII,数据读取无乱码,写入有乱码,并且做为where条件传进去的中文参数为乱码。
ORAOLEDB.ORACLE对Oracle的32位或者64位不受影响。
2.其他的连接方式
参考博客:
数据库的字符集常用的两种方式:
美国编码SIMPLIFIED CHINESE_CHINA.US7ASCII
中国编码SIMPLIFIED CHINESE_CHINA.ZHS16GBK
连接方式:1.OLEDB连接
{Provider=MSDAORA.1;User ID=martin;password=1;Data Source=orcl;Unicode=True;Integrated Security=yes;Persist Security Info=False}
{Provider=ORAOLEDB.ORACLE;User ID=martin;password=1;Data Source=orcl;Unicode=True;Persist Security Info=False}
OLEDB连接Oracle分为两种方式,即分别微软和Oracle写的不同的驱动。
provider=MSDAORA.1是微软写的驱动
provider=OraOLEDB.Oracle是Oracle自带的驱动
小结:使用MSDAORA.1驱动的OLEDB连接,不管数据库字符集是美国编码US7ASCII还是中国编码ZHS16GBK,都不会出现乱码,若出现乱码,可能是本地Oracle与服务端Oracle字符集不相同导致的。需要修改注册表nls_lang变量。但是,在X64位Oracle上使用MSDAORA.1时,会出现未在本地计算机上注册“MSDAORA.1”提供程序的问题。也就是说MSDAORA.1在64位的Oracle支持不好。
使用ORAOLEDB.ORACLE驱动的OLEDB连接,对中国编码ZHS16GBK支持很好。若Oracle字符集是美国编码US7ASCII,数据读取无乱码,写入有乱码,并且做为where条件传进去的中文参数为乱码。
ORAOLEDB.ORACLE对Oracle的32位或者64位不受影响。
2.其他的连接方式
参考博客:
http://blog.youkuaiyun.com/jack_33/article/details/7620100;
本文探讨了Oracle数据库在处理中文字符时出现的乱码问题,重点介绍了两种不同的编码方式——美国编码SIMPLIFIED CHINESE_CHINA.US7ASCII和中国编码SIMPLIFIED CHINESE_CHINA.ZHS16GBK,并提及了使用OLEDB连接时,特别是通过provider=OraOLEDB.Oracle驱动可能遇到的相关问题。参考链接提供了解决此类问题的详细步骤。
1375

被折叠的 条评论
为什么被折叠?



