Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态设置Crystal Report仍要求数据库登录_C#_Asp.net Mvc_Visual Studio 2010_Crystal Reports - Fatal编程技术网

C# 动态设置Crystal Report仍要求数据库登录

C# 动态设置Crystal Report仍要求数据库登录,c#,asp.net-mvc,visual-studio-2010,crystal-reports,C#,Asp.net Mvc,Visual Studio 2010,Crystal Reports,我正在尝试在我的MVC应用程序中部署Crystal Reports。为了充分利用Crystal Report Viewer,我必须使用webform,它在我的开发环境中工作得相当好 应用程序将部署在用户的服务器上,并连接到用户的个人数据库。这意味着在设计报表或应用程序时,我没有最终的连接信息 我能够使用web.config文件中的条目成功连接,加载带有报告信息的DataTable,并将其传递给报告。但是,报告仍要求提供db凭据。报告已设置为连接到我的数据库,因此它要求提供我的凭据,如果没有凭据,

我正在尝试在我的
MVC
应用程序中部署
Crystal Reports
。为了充分利用Crystal Report Viewer,我必须使用
webform
,它在我的开发环境中工作得相当好

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

我能够使用web.config文件中的条目成功连接,加载带有报告信息的
DataTable
,并将其传递给报告。但是,报告仍要求提供db凭据。报告已设置为连接到我的数据库,因此它要求提供我的凭据,如果没有凭据,将无法继续。但是,最终报告显示了来自其数据库的正确信息

我不确定是否需要更改报告中的某些内容,或者是否需要更改隐藏的代码。这就是我现在如何设置报表
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>");
    }
}
我无法再次登录数据库。凭证必须是用于创建报告的数据库的凭证,但显示的结果来自上面方法中填充的
DataTable
。如果它拥有当前数据库中所需的数据,为什么需要连接到原始数据库

EDIT2:


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

看看我在这方面的博客文章


需要执行两个操作,但主要操作是创建一个新的
TableLogOnInfo
实例,然后使用
ApplyGonInfo
应用。您必须为报告中的每个
datasouce
提供凭据

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

如果您想提供数据,这种方法很有效:

rd.Database.Tables[0].SetDataSource(testDt);
rd.Database.Tables[1].SetDataSource(micssys);
否则,类似这样的内容将允许报表直接访问每个
数据源的db

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

我将不得不尝试另一个
CR
问题。对于这个问题,我已经使用了
C#
来获取报告中所需的数据,为什么我必须再次登录数据库?根据我的经验,
CR
不太擅长处理大数据,我宁愿使用更好的工具。我希望我可以简单地将报告用于演示,而不是用于任何数据收集或处理。我了解到问题在于我有两个表为报告提供数据。现在,我可以使用(rd.Database.Tables[0].SetDataSource(testDt);)为每个表设置DataSource,但是表名似乎被交换了。如何使用SetDataSource强制表名?有什么想法吗?
rd.SetDatabaseLogon("username","password}");