使用.NET对象作为数据源时,为什么在Crystal Reports中出现"数据库登录失败"?

cod*_*dog 7 crystal-reports

我正在创建一个简单的报告,使用我的项目中的.NET对象作为数据源,使用SetDatasource()方法.但是,当我运行报告时,我收到"数据库登录失败"错误.这个报告根本没有连接到数据库 - 我错过了什么吗?

非常感谢,D.

补充:我想如果我包含Controller动作可能会有所帮助.这是一个快速而肮脏的测试,而不是最终方法的样子:

public ActionResult StewardSheets(int showId, int groupId)
{
    ReportClass rptH = new ReportClass();
    rptH.FileName = DataHelper.getReportFilePath("Test.rpt",this);

    NZDSDataContext dataContext = new NZDSDataContext();
    var showDetails = (from s in dataContext.Shows
                       where s.ID == showId
                       select new StewardSheetModel
                       {
                           EventDate = s.EventDate.ToLongDateString(),
                           Region = s.Region.Name,
                           ShowTitle = s.Name
                       }).FirstOrDefault();

    List<StewardSheetModel> details = new List<StewardSheetModel>();
    details.Add(showDetails);

    rptH.SetDataSource(details);

    rptH.Load();
    Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
    return File(stream, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)

固定:D'哦!我使用ReportClass而不是ReportDocument.更改了该行,并且还使用了Refresh(),因为Load()不是有效的方法.现在它工作得很好!

Tim*_*ver 8

如果使用ADO.NET DataSet作为数据源,则DataSet定义可能与报表中的定义不同步.从报表设计器的上下文菜单中选择Database-> Verify Database选项通常可以解决此问题.

此外,如果报表已链接表,并且您无法为其中一个表设置数据源,则会出现此错误.修复是要么从报表中删除表,要么正确设置它的数据源.

例如,如果您的报表在某些键上链接了一个Customers表和一个Orders表,则需要为这两个表设置数据源.如果您忘记并且只设置了一个,则会出现"数据库登录失败"错误,这会产生误导.

// Create a new customer orders report.
CustomerOrdersReport report = new CustomerOrdersReport();

// Get the report data.
DataTable customersTable = getCustomersData();
DataTable ordersTable = getOrdersData();

// Set datasources.
report.Database.Tables["Customers"].SetDataSource(customersTable);
report.Database.Tables["Orders"].SetDataSource(ordersTable ); // Don't forget this line like I did!!
Run Code Online (Sandbox Code Playgroud)


小智 5

请尝试,右键单击“报告”->“数据库”->“验证数据库”。

如果出现对话框,找到您的 DataSet .xsd 文件(例如 DataSet1.xsd)并应用。

我的问题就这样解决了。


cod*_*dog 3

通过使用适当的类修复:ReportDocument 而不是 ReportClass。