C# 连接Sybase数据库,出现中文乱码。

野叔啊 2019-03-09 03:08:39
通过引用Sybase.Data.AseClient.dll连接sybase数据库。查询并绑定Datagridview后,出现中文乱码。

在网上查询很多资料后发现是字符集的问题,查看服务端后发现默认字符集为cp850.

解决办法无非两种,一种是改服务端的字符集,但是因为该数据库中已存在大量数据,所有此路行不通。另一种是在数据库连接字符串上加charset=cp85。
但尝试后发现乱码依然存在。请问各位前辈,接下来我应该怎么解决该问题。
...全文
447 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
野叔啊 2019-03-10
  • 打赏
  • 举报
回复
通过转码
Encoding.GetEncoding("gbK").GetString(Encoding.GetEncoding("cp850").GetBytes(getStr))

可以转为正常的中文,但是我的数据量太大了。
野叔啊 2019-03-09
  • 打赏
  • 举报
回复
引用 1 楼 以专业开发人员为伍 的回复:
我们以 sql server 为例,假设一个数据库表字段定义时不是 unicode 的,那么你就要写
insert aaa (x) values(N'张三')
这样的代码,在字符串前边要写 N。这告诉数据库引擎 .net 程序发过来的 unicode 编码的指令中的数据要先进行 unicode 解码,然后再按照数据库表的相关字段的编码方式编码。读取数据时无需声明,因为 .net DbProvider 自然就会把读取到的中文按照数据库相关字段的编码方式解码、然后再按照 unicode 编码,最后才传到 .net 数据库驱动客户端。

我试了您的方法,不知道SqlServer是怎么样的。但是Sybase确实是不行

  • 打赏
  • 举报
回复
我们以 sql server 为例,假设一个数据库表字段定义时不是 unicode 的,那么你就要写
insert aaa (x) values(N'张三')
这样的代码,在字符串前边要写 N。这告诉数据库引擎 .net 程序发过来的 unicode 编码的指令中的数据要先进行 unicode 解码,然后再按照数据库表的相关字段的编码方式编码。读取数据时无需声明,因为 .net DbProvider 自然就会把读取到的中文按照数据库相关字段的编码方式解码、然后再按照 unicode 编码,最后才传到 .net 数据库驱动客户端。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧