2012-08-14 705 views
0

我正在使用Visual Studio 2008,mvc 2附带的Crystal报告。 我想要用户单击链接时生成PDF报告。登录失败。详细信息:28000:[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]用户'用户'登录失败

这是我的方法来配置水晶报表

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驱动程序] [SQL Server]登录用户'用户'失败。 错误文件C:\ Windows \ TEMP \ ComplaintReport {5BDD522D-04DA-48CD-9F43-A9C648F195D9} .rpt: 无法连接:不正确的登录参数。在CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(例外五) 在CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) 在CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) 在CrystalDecisions.CrystalReports.Engine.ReportDocument。在F:\ myapp \ BLL \ Home \ HomeBLLC.CS中的myapp.BLL.Home.HomeBLLC.GetPDFStream(ReportClass rptClass)上的CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType) (ExportOptions options) 1082

at myapp.Controllers.ComplaintController.GetComplaintFile(String ComplaintNumber)in F:\ myapp \ Controllers \ ComplaintControl ler.cs:line 709 at myapp.Controllers.ComplaintController.Complaint()in F:\ myapp \ Controllers \ ComplaintController.cs:line 76 at lambda_method(ExecutionScope,ControllerBase,Object []) at System.Web.Mvc .ActionMethodDispatcher.Execute(ControllerBase controller,Object [] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker。 <> C_ DisplayClassd.b _a() 在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter滤波器,ActionExecutingContext preContext,函数功能1 continuation) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList 1个滤波器,ActionDescriptor actionDescriptor,IDictionary`2参数) 在System.Web.Mvc。 ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,String actionName)

我的DSN配置正确,因为其他使用相同DSN的应用程序正在正确运行Crystal报表。

在此先感谢

回答

0

我错过了基本的东西,学习相关的问题后,我才知道,我忘了给我的配置Crystal报告方法的认证是必要的 我的修改方法如下

public ReportClass ConfigureReportClass(string strReportPath, object[] objParameters) 
    { 
     ReportClass rptH = new ReportClass(); 
     rptH.FileName = strReportPath; 
     int Count = 0; 
     rptH.Load(); 
     rptH.SetDatabaseLogon("myusername", "mypassword"); 
     try 
     { 
      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; 
    } 

我唯一添加的是rptH.SetDatabaseLogon(“myusername”,“mypassword”); 我的代码和它的工作。 不知道为什么我必须再次进行身份验证,因为我已经在DSN中进行了身份验证。任何建议都欢迎。