我正在使用 Visual Studio 2008、mvc 2 附带的 Crystal 报告。我希望当用户单击链接时生成 PDF 报告。
这是我配置水晶报表的方法
public ReportClass ConfigureReportClass(string strReportPath, object[] objParameters)
{
ReportClass rptH = new ReportClass();
try
{
rptH = new ReportClass();
rptH.FileName = strReportPath;
int Count = 0;
rptH.Load();
if (objParameters == null)
return rptH;
foreach (object obj in objParameters)
{
ParameterField param = rptH.ParameterFields[Count++]; // first param
param.AllowCustomValues = true;
ParameterDiscreteValue Disparam = new ParameterDiscreteValue();
Disparam.Value = obj;
param.CurrentValues.Add(Disparam);
}
}
catch (Exception ex)
{
throw ex;
}
return rptH;
}
和这个把它转换成PDF
public System.IO.Stream GetPDFStream(CrystalDecisions.CrystalReports.Engine.ReportClass rptClass)
{
System.IO.Stream stream = rptClass.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
return stream;
}
这是我在控制器中的操作方法
public FileResult GetComplaintFile(String ComplaintNumber)
{
HomeBLLC objHomeBLLC = new HomeBLLC();
ReportClass rptH = objHomeBLLC .ConfigureReportClass(Server.MapPath("~/Views/Complaint/ComplaintReport.rpt"), new object[] { ComplaintNumber });
return File( objHomeBLLC.GetPDFStream(rptH),"application/pdf" );
}
我可以在 Visual Studio 的设计视图中看到我的报告的预览,但在运行时出现异常
Logon failed.
详细信息:28000:[Microsoft][ODBC SQL Server Driver][SQL Server]用户“user”登录失败。文件 C:\Windows\TEMP\ComplaintReport {5BDD522D-04DA-48CD-9F43-A9C648F195D9}.rpt 中的错误:无法连接:登录参数不正确。在 CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) 在 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) 在 CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) 在 CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions选项)在 CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType) 在 myapp.BLL.Home.HomeBLLC.GetPDFStream(ReportClass rptClass) 在 F:\myapp\BLL\Home\HomeBLLC.CS:line 1082
在 myapp.Controllers.ComplaintController.GetComplaintFile(String ComplaintNumber) 在 F:\myapp\Controllers\ComplaintController.cs:line 709 在 myapp.Controllers.ComplaintController.Complaint() 在 F:\myapp\Controllers\ComplaintController.cs:line 76在 lambda_method(ExecutionScope , ControllerBase , Object[] ) 在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器, Object[] 参数) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数) 在 System .Web.Mvc.ControllerActionInvoker.<>c_ DisplayClassd.b _a() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 处的 1 个过滤器、ActionDescriptor actionDescriptor、IDictionary`2 参数)
我的 DSN 配置正确,因为使用相同 DSN 的其他应用程序正在正确运行 Crystal 报表。
提前致谢