2012-08-14 953 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中進行了身份驗證。任何建議都歡迎。