读书人

dotnet读sybase数据库乱码有关问题一解

发布时间: 2012-09-22 21:54:54 作者: rapoo

dotnet读sybase数据库乱码问题一解

两年前,在项目中因要从另一厂商系统sybase数据库抽取数据,在协调好所有格式、内容之后,编码的过程中发现了一个问题:dotnet从sybase数据库读出来的中文是乱码!而使用sybase的SQL Advantage查询出来的数据中文正常,该厂商使用java读出来的数据也正常。我们知道,这是字符集的问题,通过对数据库安装字符集可以解析,但数据库是其他厂商的,我们无法让他们为我们安装需要的字符集。在经过很长时间的网上搜索,使用各种字符集尝试后,最后放弃尝试,通过oracle的透明网关连接解析了该问题。

最近,由于安全性,把oracle从10.2.0.1升级到10.2.0.4之后,透明网关运行不正常,又被迫把oracle还原为10.2.0.1。同时通过oracle的透明网关连接,最近感觉速度好像很慢,而且有时无故连接不上sybase数据库,原因很难查。

于是又萌生了使用原生的sybase连接读取数据的想法:通过java读取数据不乱码,为什么通过dotnet就乱码呢?再一次在网上展开是搜索,http://topic.csdn.net/u/20090603/14/928f0b96-09db-4c49-96c5-4486a448128d.html的第11楼和12楼的回答:

    /// <summary>    /// 字符转换    /// </summary>    public static class CharConvert    {        /// <summary>        /// 转换sybase的中文乱码为正常可识别的字符        /// </summary>        /// <param name="sourceStr"></param>        /// <returns></returns>        public static string ConvertSybaseCharset(string sourceStr)        {            return Encoding.GetEncoding("gbk").GetString(Encoding.GetEncoding("latin1").GetBytes(sourceStr));        }        public static string ConvertToSybaseCharset(string sourceStr)        {            return Encoding.GetEncoding("latin1").GetString(Encoding.Default.GetBytes(sourceStr));        }    }
用于实现sybase字符乱码的处理。

自此,dotnet读sybase中文乱码的问题得到解决,而且经测,通过原生的sybase连接,抽取数据的速度也有不少的提升。

在此记录,供遇到同样问题的朋友参考,避免再像我们一样走的弯路。

再次感谢http://topic.csdn.net/u/20090603/14/928f0b96-09db-4c49-96c5-4486a448128d.html的11楼luito和12楼iihero两位朋友。


读书人网 >其他数据库

热点推荐