asp.net Crystal Reports,数据库登录失败

时间:2013-07-04 01:47:16

标签: asp.net .net crystal-reports

我无法将此报告导出为pdf。我以前做了很多次,但现在我碰到了一堵砖墙。任何帮助将不胜感激。

这是在Windows 7 64位计算机上。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

Exception Details: System.Runtime.InteropServices.COMException: Database logon failed.

Source Error: 



Line 25:         exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat
Line 26:         exportOpts.ExportFormatOptions = pdfOpts
Line 27:         report.ExportToHttpResponse(exportOpts, Response, False, "")
Line 28: 
Line 29:     End Sub

Stack Trace: 



[COMException (0x8004100f): Database logon failed.]
   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext) +0
   CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) +519

[LogOnException: Database logon failed.]
   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) +1243
   CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) +621
   CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) +1201
   CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions options) +150
   CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToHttpResponse(ExportOptions options, HttpResponse response, Boolean asAttachment, String attachmentName) +212
   reports_CreateReport.generateReport(DataSet ds, String reportpath, ArrayList params) in C:\Users\boruch\Dropbox\Korns-ConnectionStr\reports\CreateReport.aspx.vb:27
   reports_CreateReport.btn_GenReport_Click(Object sender, EventArgs e) in C:\Users\boruch\Dropbox\Korns-ConnectionStr\reports\CreateReport.aspx.vb:58
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9552602
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18044 

2 个答案:

答案 0 :(得分:3)

我会继续发布我所拥有的内容,以便它可以帮助你。我们放弃了Crystal,因为它太粗略了(我相信第一次出口失败然后每次都会有效,直到应用程序关闭)和SAP基本上告诉我们他们不关心我们是否我们做了一次徒步旅行。我们转而使用SSRS,并为此感到高兴......但我离题了。

你没有显示很多代码,所以我不知道这是你的工作方式。另外,我的是C#,所以你需要转换...但希望你能在这个例子中找到解决问题的方法。我想它会在证书的背景下......

加载文档:

ReportDocument rd = new ReportDocument();
rd.Load(rptFile);

设置凭据

ConnectionInfo connectInfo = new ConnectionInfo()
{
    ServerName = dbServer,
    DatabaseName = "",
    UserID = userId,
    Password = password
};
rd.SetDatabaseLogon(userId, password);
foreach (Table tbl in rd.Database.Tables)
{
    tbl.LogOnInfo.ConnectionInfo = connectInfo;
    tbl.ApplyLogOnInfo(tbl.LogOnInfo);
}

然后设置导出:

DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
ExportOptions CrExportOptions;
PdfRtfWordFormatOptions pdfFormatOptions = new PdfRtfWordFormatOptions();
CrDiskFileDestinationOptions.DiskFileName = outputPath;
CrExportOptions = rd.ExportOptions;
{
    CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
    CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
    CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
    CrExportOptions.FormatOptions = pdfFormatOptions;
}

提供报告参数

SetCurrentValuesForParameterField(rd, "IP_COMP_CODE", cc);
SetCurrentValuesForParameterField(rd, "IP_YEAR", yr);
SetCurrentValuesForParameterField(rd, "IP_WEEK", wk);

并导出......

rd.Export();

SetCurrentValuesForParameterField的实现:

private void SetCurrentValuesForParameterField(ReportDocument reportDocument, string paramFieldName, int value)
{
    ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
    parameterDiscreteValue.Value = value;

    ParameterValues currentParameterValues = new ParameterValues();
    currentParameterValues.Add(parameterDiscreteValue);

    reportDocument.DataDefinition.ParameterFields[paramFieldName].ApplyCurrentValues(currentParameterValues);
}

答案 1 :(得分:0)

我也遇到了这个错误..我通过检查我的数据表值来解决它..我错过了对一个数据表进行查询..

对于Ex: 我的Crystal报表数据集中有11个DataTables ..但是我想念数据表11的查询.. 我检查并更正后..现在我的excel和PDf正常工作,没有得到数据库登录失败错误..

希望它对你们来说很有用......

相关问题