2012-11-05 51 views
0

我试图在我的MVC应用程序中部署Crystal Reports。为了充分利用Crystal Report Viewer,我必须使用webform,这在我的开发环境中运行良好。动态设置Crystal Report仍然要求数据库登录

该应用程序将部署在用户的服务器上并连接到他们的个人数据库。这意味着我在设计报告或应用程序时没有最终的连接信息。

我能够使用它们在web.config文件中的条目成功连接,加载带有报告信息的DataTable,并将它传递给报告。但是,报告仍然要求提供数据库凭据。该报告被设置为连接到我的数据库,所以它要求我的凭据,不会离开他们。但是,最终报告显示他们的数据库中的正确信息。

我不确定是否需要更改报表中或代码背后的内容。这是我如何设置报告ReportSource现在:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string strReportName = System.Web.HttpContext.Current.Session["ReportName"].ToString(); 
    try 
    { 
     ReportDocument rd = new ReportDocument(); 
     string strRptPath = Server.MapPath("~/") + "Rpts//" + strReportName; 
     rd.Load(strRptPath); 

     SqlParameter[] sqlParams = {}; 
     DataTable testDt = DBHelper.GetTable("rptInvtDuplDesc", sqlParams); 
     rd.DataSourceConnections.Clear(); 
     rd.SetDataSource(testDt); 
     CrystalReportViewer1.ReportSource = rd; 
    } 
    else 
    { 
     Response.Write("<H2>Nothing Found; No Report name found</H2>"); 
    } 
} 

如何阻止要求的证书原件的报告?

编辑:

如果我通过这样的登录到我的分贝:

rd.SetDatabaseLogon("username", "password"); 

我不要再拿到数据库登录。凭证必须用于创建报告的数据库,但显示的结果来自上述方法中填充的DataTable。如果它有当前数据库所需的数据,为什么它需要连接到原始数据库?

EDIT2:

我对这个报告2种数据源。一个是来自db的表格,另一个是存储过程的结果。我现在知道这是额外登录的原因。

回答

0

您必须为报告中的每个datasouce提供凭据。

理想情况下,报告将有一个单一的datasource。如果这不可行,则需要为每个提供凭据,或为每个提供数据。

像这样的东西效果很好,如果你想提供的数据:

rd.Database.Tables[0].SetDataSource(testDt); 
rd.Database.Tables[1].SetDataSource(micssys); 

否则,像这样将允许报告直接访问数据库的每个datasource

rd.SetDatabaseLogon("username","password}"); 
1

看看我的博客文章here就可以了。

需要执行一些操作,但主要是创建一个新的TableLogOnInfo实例,然后应用使用ApplyLogOnInfo

+0

我会不得不尝试另一个'CR'问题我有。对于这个问题,我已经使用'C#'来获取报告中我想要的数据,为什么我必须再次登录到数据库?根据我的经验,'CR'不擅长处理大量数据,我宁愿使用更好的工具。我希望我可以将报告仅用于演示,而不用于任何数据收集或处理。 – davids

+0

我已经了解到问题是我有两个表格向报告提供数据。我现在可以为每个使用(rd.Database.Tables [0] .SetDataSource(testDt);)设置datasouce,但表名似乎被交换。我如何使用SetDataSource强制表名?有任何想法吗? – davids

相关问题