首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将凭据传递给Sql Report Server 2008

将凭据传递给Sql Report Server 2008
EN

Stack Overflow用户
提问于 2009-03-22 22:16:48
回答 4查看 52.3K关注 0票数 21

我是C#的新手,我的英语不是很好-如果我错过了一点,请提前道歉。

我试着用ReportService控件构建一个ASP.NET网站。您可能已经知道,SSRS 2008不允许匿名登录。因此,我尝试将凭据传递给SSRS,这些凭据将存储在我的网页中,这样用户就可以在不登录的情况下查看报告。

我找到了下面的代码并将其放到了我的WebForm上,但是我的报告参数有问题。

  • 如果报告参数有默认值,则以下代码工作正常。
  • ,但是,如果我尝试更改参数的值,整个页面都是

已刷新,在我单击“查看报告”按钮之前,所有

参数将重置为默认值或空值。

有什么建议可以避免刷新整个页面,或者用另一种方法将登录信息传递给SSRS?在此之前非常感谢。

代码语言:javascript
复制
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using Microsoft.Reporting.WebForms;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();
    }
}

public class CustomReportCredentials : IReportServerCredentials
{
     private string _UserName;
     private string _PassWord;
     private string _DomainName;

     public CustomReportCredentials(string UserName, string PassWord, string DomainName)
     {
        _UserName = UserName;
        _PassWord = PassWord;
        _DomainName = DomainName;
     }

     public System.Security.Principal.WindowsIdentity ImpersonationUser
     { 
        get { return null; } 
     } 

     public ICredentials NetworkCredentials
     {
        get { return new NetworkCredential(_UserName, _PassWord, _DomainName); }
     }

     public bool GetFormsCredentials(out Cookie authCookie, out string user,
      out string password, out string authority)
     {
        authCookie = null;
        user = password = authority = null;
        return false;
     }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-22 23:04:24

我真的没有搞过if (!IsPostBack) --但是我的SSRS告诉我,您可能想要将这些东西包装在SSRS块中,以防止它在页面刷新时运行。我的猜测是ReportViewer1.ServerReport.Refresh()会再次提取默认值。

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack) 
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();
    }
}
票数 18
EN

Stack Overflow用户

发布于 2009-04-16 08:45:26

我创建了一个新函数,并在属性、事件、reportViewer的设计视图中选择了它。(在选择INIT I中)

之后,页面就可以正常工作了,我可以更改参数值了。

Default.aspx现在看起来像这样:

代码语言:javascript
复制
    </head>
      <body>
        <form id="form1" runat="server">
         <div>
            <rsweb:ReportViewer ID="ReportViewer1" runat="server" onload="Admir">
            </rsweb:ReportViewer>
         </div>
       </form>
    </body>

Default.aspx.cs看起来像这样

代码语言:javascript
复制
 public void Admir(object sender, EventArgs e)
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc = new CustomReportCredentials("administrator", "mypass", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();

    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
票数 0
EN

Stack Overflow用户

发布于 2015-09-24 02:45:29

您可以在页面加载事件中使用以下代码来提供参数

代码语言:javascript
复制
ReportParameter[] reportParameterCollection = new ReportParameter[1]; //Array size describes the number of paramaters.
reportParameterCollection[0] = new ReportParameter();
reportParameterCollection[0].Name = "ACCMGR";   //Give Your Parameter Name
reportParameterCollection[0].Values.Add("12"); //Pass Parametrs's value here.
ReportViewer1.ServerReport.SetParameters(reportParameterCollection);
ReportViewer1.ServerReport.Refresh();

我希望这对你有用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/671694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档