0

我正在尝试Crystal Reports在我的MVC应用程序中进行部署。为了充分利用 Crystal Report Viewer,我必须使用 a webform,它在我的开发环境中运行良好。

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

我能够使用他们在 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方法中的填充。如果它有当前数据库所需的数据,为什么需要连接到原始数据库?

编辑2:

我有此报告的 2 个数据源。一个是数据库中的表,另一个是存储过程的结果。我现在了解到这是额外登录的原因。

4

2 回答 2

1

在此查看我的博客文章。

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

于 2012-11-05T16:40:58.143 回答
0

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

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

如果您想提供数据,这样的方法效果很好:

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

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

rd.SetDatabaseLogon("username","password}");
于 2012-11-05T23:16:48.923 回答