转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
SQL2005报表参数大于2K问题的终极解决方案         

SQL2005报表参数大于2K问题的终极解决方案

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1023 更新时间:2007/11/14 13:12:39

问题来由:
 当通过表单提交信息给报表服务时,当参数值大于2K时,这时如果加入显示工具条参数时,IE会返回该页无法显示这样的错误信息,而如果不加显示工具条参数时,结果正常,但是就是没有工具条

问题反馈:
 据微软的专家说这是SQL2000/SQL2005的BUG,真是奇怪了,SQL2005研究了5年才发布,居然这一BUG依然保留,可以想象这是多么大的一个技术难题

解决思路:
 据微软提供的建议,建议编写一个自定义的报表工具条

解决办法:
 首先确定报表工具条的作用,它的作用是用于翻页和导出报表数据到其它类型的文档
 可以看出,技术难点在于翻页,也就是当前报表总页数的获取
 那么如何才能获得带指定参数的指定报表的页数呢?微软的建议是通过报表服务的WEB服务接口来获取,当服务器上装了报表服务时,也就相应的存在了报表服务的WEB服务接口,一般访问地址如下:
 http://****/reportserver/reportservice.asmx
 通过这一公开的WEB服务,调用其相应功能可以实现报表服务的N多的功能,获取页数只是其中微不足道的功能之一,实现代码如下:
  public int GetNumber()
  {
 
   string deviceinfo=@"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";
   string[] parameters=_parameter.Split(''''&'''');
   int parameterNumber=parameters.Length;
   RS.ParameterValue[] param=new ReportNumber.RS.ParameterValue[parameterNumber];
   for(int i=0;i<parameterNumber;i++)
   {
    string[] p=parameters[i].Split(''''='''');
    param[i]=new ParameterValue();
    param[i].Name=p[0];
    param[i].Value=p[1];

   }
   RS.ReportingService rs=new ReportNumber.RS.ReportingService();
   rs.Url=this._url+@"/ReportService.asmx";
   /*
   注意,如果你的报表服务器和应用服务器不处于同一机器,那么你必须提供访问报表服务器的凭证,如下面的凭证是通过使用Negotiate 验证来传送用户名、密码
   当然,如果2个服务器在同一台机器,那就非常简单了,直接使用本地凭证验证即可
   */
      CredentialCache cache = new CredentialCache();
      cache.Add(new Uri(rs.Url), "Negotiate", new NetworkCredential("administrator", "crserver", ""));
      rs.Credentials = cache;
      /*
     
   rs.Credentials=System.Net.CredentialCache.DefaultCredentials;
      */
   DataSourceCredentials[] credentials=null;
   string showHideToggle=null;
   string encoding;
   string mimeType;
   Warning[] warnings=null;
   ParameterValue[] reportHistoryParameters=null;
   string[] streamIDs=null;
   SessionHeader sh=new SessionHeader();
   rs.SessionHeaderValue=sh;
   string historyID=null;

   byte[] result=rs.Render(ReportName,"HTML4.0",historyID,deviceinfo,param,credentials,showHideToggle,out encoding,out mimeType,out reportHistoryParameters,out warnings,out streamIDs);
   string s=System.Text.UTF8Encoding.UTF8.GetString(result,0,result.Length-1);
   string r=@"<hr/>";
   Regex regex=new Regex(r);
   MatchCollection mc=regex.Matches(s);
   return mc.Count+1; 
 
 }    


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台