none
Reporting Services报表连接DB2数据源,中文显示乱码问题求助。 RRS feed

  • 问题

  • 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:  "".

    请大家帮忙看看是什么原因,该如何解决中文字符显示为?号的问题。


    2011年4月25日 2:25

答案

  • 谢谢回复。

    但是你说的前面加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来查找问题的解决办法。

    2011年4月26日 8:36

全部回复

  • 你好!
    首先,你可以尝试修改你的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


    • 已建议为答案 Ad Gao 2011年4月26日 8:30
    • 取消建议作为答案 Ad Gao 2011年4月26日 8:31
    2011年4月26日 5:54
  • 谢谢回复。

    但是你说的前面加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来查找问题的解决办法。

    2011年4月26日 8:36