积极答复者
Reporting Services报表连接DB2数据源,中文显示乱码问题求助。

问题
-
SQL语句如下:
select Ayear, case when OTHERMANAGE=1 then
'移通GSM'
when OTHERMANAGE=2 then
'固定PSTN-一般默认为网通'
when OTHERMANAGE=3 then
'联通GSM'
when OTHERMANAGE=4 then
'联通CDMA'
when OTHERMANAGE=5 then
'长城模拟'
when OTHERMANAGE=6 then
'全球星'
when OTHERMANAGE=7 then
'移通模拟'
when OTHERMANAGE=8 then
'国际'
when OTHERMANAGE=9 then
'中国电信'
when OTHERMANAGE=10 then
'小灵通'
when OTHERMANAGE=11 then
'铁通'
when OTHERMANAGE=12 then
'未知主叫号码'
when OTHERMANAGE=13 then
'卫通固话'
else
'其它'
end as OTHERMANAGE,sum(TOTAL_FEE) as TOTAL_FEE,count(*) as countnum
from (select left(start_datetime,4) as Ayear,OTHERMANAGE,(LOCALFEE+ROAMFEE+TOLLFEE+RURALADDFEE+TOLLADDFEE+INFOFEE) as TOTAL_FEE from txb.cx_CDR_DETAIL_TEMP
where errotype like '%a%' and left(start_datetime,4) =?) as a
group by Ayear,OTHERMANAGE
order by OTHERMANAGE在SecureCRT中用该语句执行查询, db2返回的结果显示没有问题,引号中的中文字符能正确显示。
用db2 get db cfg查看,代码页为1386。
但是在Reporting Services中查看dataset的查询结果,中文字符却显示为?号。
Reporting Services中建立的db2数据源,主机CCSID是37,代码页是1252。
我以为是代码页设置问题,就把Reporting Services的db2数据源代码页修改为1386.但是修改了以后,查看dataset的查询结果却报错。报错信息为:
An unexpected token "g tetime, 4) = ?) as a END-OF-STATEMENT" was found following "". Expected tokens may include: "".
请大家帮忙看看是什么原因,该如何解决中文字符显示为?号的问题。
答案
-
谢谢回复。
但是你说的前面加N的办法还是不行。其他语言和字体选项我都是设为中文的。
这个问题我用更换数据源的Provider的方式解决了。
我用IBM OLE DB Provider for DB2作为数据源的OLE DB Provider,中文查询结果能够正确显示了。
看来连接DB2做查询,还是IBM自己出的OLE DB Provider比较靠得住。
IBM OLE DB Provider for DB2是本机安装了 DB2 Express-C之后才有的,好象没有单独提供的程序。
以后遇到类似问题的同学可以尝试换换OLE DB Provider来查找问题的解决办法。
- 已建议为答案 Ad Gao 2011年4月26日 8:36
- 已标记为答案 WeiLin QiaoModerator 2011年5月3日 3:02
全部回复
-
你好!
首先,你可以尝试修改你的T-SQL语句,在中文字段名前面添加字符N,比如:
select Ayear, case when OTHERMANAGE=1 then N'移通GSM' when OTHERMANAGE=2 then N'固定PSTN-一般默认为网通' when OTHERMANAGE=3 then N'联通GSM' when OTHERMANAGE=4 then N'联通CDMA' when OTHERMANAGE=5 then N'长城模拟' when OTHERMANAGE=6 then N'全球星' when OTHERMANAGE=7 then N'移通模拟' when OTHERMANAGE=8 then N'国际' when OTHERMANAGE=9 then N'中国电信' when OTHERMANAGE=10 then N'小灵通' when OTHERMANAGE=11 then N'铁通' when OTHERMANAGE=12 then N'未知主叫号码' when OTHERMANAGE=13 then N'卫通固话' else N'其它' end as OTHERMANAGE,sum(TOTAL_FEE) as TOTAL_FEE,count(*) as countnum from (select left(start_datetime,4) as Ayear,OTHERMANAGE,(LOCALFEE+ROAMFEE+TOLLFEE+RURALADDFEE+TOLLADDFEE+INFOFEE) as TOTAL_FEE from txb.cx_CDR_DETAIL_TEMP where errotype like '%a%' and left(start_datetime,4) =?) as a group by Ayear,OTHERMANAGE order by OTHERMANAGE
其次, 请检查操作系统的区域和语言选项是否正确:格式设置成中文,当前区域设置成中国。另外,在设计报表的时候,尝试将字段对应控件的字体属性设置成中文字体类型,如宋体。
Best Regards,
Stephanie Lv
-
谢谢回复。
但是你说的前面加N的办法还是不行。其他语言和字体选项我都是设为中文的。
这个问题我用更换数据源的Provider的方式解决了。
我用IBM OLE DB Provider for DB2作为数据源的OLE DB Provider,中文查询结果能够正确显示了。
看来连接DB2做查询,还是IBM自己出的OLE DB Provider比较靠得住。
IBM OLE DB Provider for DB2是本机安装了 DB2 Express-C之后才有的,好象没有单独提供的程序。
以后遇到类似问题的同学可以尝试换换OLE DB Provider来查找问题的解决办法。
- 已建议为答案 Ad Gao 2011年4月26日 8:36
- 已标记为答案 WeiLin QiaoModerator 2011年5月3日 3:02