我正在尝试在Crystal Reports
应用中部署MVC
。为了充分利用Crystal Report Viewer,我必须使用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");
我没有再次获得db登录。凭据必须是用于创建报告的数据库,但显示的结果来自上面方法中填充的DataTable
。如果它具有当前数据库所需的数据,为什么需要连接到原始数据库?
EDIT2:
此报告包含2个数据源。一个是db中的表,另一个是存储过程的结果。我现在知道这是额外登录的原因。
答案 0 :(得分:1)
请查看我的博客文章here。
需要执行一些操作,但主要是创建新的TableLogOnInfo
实例,然后应用ApplyLogOnInfo
。
答案 1 :(得分:0)
您必须为报告中的每个datasouce
提供凭据。
理想情况下,报告会有一个datasource
。如果无法做到这一点,您需要为每个提供凭据,或为每个提供凭据。
如果你想提供数据,这样的东西效果很好:
rd.Database.Tables[0].SetDataSource(testDt);
rd.Database.Tables[1].SetDataSource(micssys);
否则,类似这样的内容将允许报告直接访问每个datasource
的数据库:
rd.SetDatabaseLogon("username","password}");