C#水晶报告PDF例外

C#水晶报告PDF例外,c#,memory,stream,crystal-reports-2010,C#,Memory,Stream,Crystal Reports 2010,我有一个基于我手动创建的数据表的c#report PDF导出项目。我正在使用以下代码尝试设置数据源,并尝试了许多不同的变体,但无法从数据库中获取信息,以正确显示在导出为PDF的报告中。并保存为我电脑的硬盘 但是当运行下面的代码时,我看不到任何PDF被导出。例外是 下面 CrystalDecisions.CrystalReports.Engine.LogOnException:数据库登录失败System.Runtime.InteropServices.COMException:数据库登录失败 我在

我有一个基于我手动创建的数据表的c#report PDF导出项目。我正在使用以下代码尝试设置数据源,并尝试了许多不同的变体,但无法从数据库中获取信息,以正确显示在导出为PDF的报告中。并保存为我电脑的硬盘

但是当运行下面的代码时,我看不到任何PDF被导出。例外是 下面

CrystalDecisions.CrystalReports.Engine.LogOnException:数据库登录失败System.Runtime.InteropServices.COMException:数据库登录失败

我在主报表中设置了两个数据源:合同、合同成员 合同成员分包报告

一个合同可以有多个合同成员

它发生在最后一行

非常感谢您的帮助。下面是我的代码

   string result;
            ContractReport report = new ContractReport();
            ContractDTO source = new ContractDTO();            
            report.Load(Server.MapPath("~/ContractReport.rpt"));
            source.Id = 1;
            source.Code = "ABC";
            source.Title = "LondonEast";          
            source.Member = new List<ContractMembersDTO>();
            source.Member.Add(new ContractMembersDTO() { Id = 1, ContractId = 1, StaffNameEng = "ABC", Position = "Project Manager" });
            source.Member.Add(new ContractMembersDTO() { Id = 2, ContractId = 1, StaffNameEng = "DEF", Position = "Project QS" });
            source.Member.Add(new ContractMembersDTO() { Id = 3, ContractId = 1, StaffNameEng = "GHI", Position = "Site Manager" });         
            report.SetDataSource(new[] { source });
            if (reportType.Equals("PDF"))
            {
                try
                {
                    MemoryStream oStream;
                    oStream = (MemoryStream)report.ExportToStream(ExportFormatType.PortableDocFormat);
字符串结果;
ContractReport=新ContractReport();
ContractDTO source=新ContractDTO();
Load(Server.MapPath(“~/ContractReport.rpt”);
source.Id=1;
source.Code=“ABC”;
来源:Title=“伦敦东部”;
source.Member=新列表();
Add(newContractMembersDTO(){Id=1,contractD=1,StaffNameEng=“ABC”,Position=“Project Manager”});
Add(new ContractMembersDTO(){Id=2,contractD=1,StaffNameEng=“DEF”,Position=“Project QS”});
Add(newContractMembersDTO(){Id=3,contractD=1,StaffNameEng=“GHI”,Position=“Site Manager”});
report.SetDataSource(新[]{source});
if(reportType.Equals(“PDF”))
{
尝试
{
记忆流;
oStream=(MemoryStream)report.ExportToStream(ExportFormatType.PortableDocFormat);

如果报告中只有一个表,那么语法应该可以

如果主报表有多个表,请尝试使用以下方法:

report.Database.Tables["DATASOURCE_TABLE_1"].SetDataSource(myCustomSource);
report.Database.Tables["DATASOURCE_TABLE_2"].SetDataSource(myOtherSource);
如果您有子报表,则还需要单独设置这些子报表:

report.Subreports[0].SetDataSource(mySubreportDatasource);


如果报告中只有一个表,那么语法应该可以工作

如果主报表有多个表,请尝试使用以下方法:

report.Database.Tables["DATASOURCE_TABLE_1"].SetDataSource(myCustomSource);
report.Database.Tables["DATASOURCE_TABLE_2"].SetDataSource(myOtherSource);
如果您有子报表,则还需要单独设置这些子报表:

report.Subreports[0].SetDataSource(mySubreportDatasource);


我已经多次与此抗争。从未找到明确的答案,但在CR designer中打开报告(与使用的运行时相匹配的版本),并且更改其中的连接信息始终为我解决了这个问题。是的,它有子报告,我在主报告中设置了两个数据源。我对此进行了多次讨论。从未找到明确的答案,但在CR designer中打开报告(与使用的运行时相匹配的版本),并且更改其中的连接信息对我来说总是解决了这个问题。是的,它有子报告,我在主报告中设置了两个数据源。如果我的数据库表实际上是POCO类呢?您的意思是分配每个表(带有输入的POCO类)在报告中单独?我已经在crystal reoprt设置中添加了两个表作为.nET对象如果我的数据库表实际上是POCO类呢?你的意思是单独分配报告中的每个表(带有输入的POCO类)?我已经在crystal reoprt设置中添加了两个表作为.nET对象