C# 登录失败。详细信息:28000:[Microsoft][ODBC SQL Server驱动程序][SQL Server]用户登录失败';用户';

C# 登录失败。详细信息:28000:[Microsoft][ODBC SQL Server驱动程序][SQL Server]用户登录失败';用户';,c#,asp.net-mvc-2,crystal-reports,C#,Asp.net Mvc 2,Crystal Reports,我使用的是VisualStudio2008附带的CrystalReport,MVC2。 我想当用户点击链接的PDF报告生成 这是我配置crystal report的方法 public ReportClass ConfigureReportClass(string strReportPath, object[] objParameters) { ReportClass rptH = new ReportClass(); try {

我使用的是VisualStudio2008附带的CrystalReport,MVC2。 我想当用户点击链接的PDF报告生成

这是我配置crystal report的方法

    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" );
    }
我可以在VisualStudio的“设计”视图中看到报表的预览,但在运行时会出现异常

 Logon failed.
详细信息:28000:[Microsoft][ODBC SQL Server驱动程序][SQL Server]用户“user”登录失败。 文件C:\Windows\TEMP\ComplaintReport{5BDD522D-04DA-48CD-9F43-A9C648F195D9}中出错。rpt: 无法连接:登录参数不正确。在CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException处(异常e) 位于CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) 位于CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) 位于CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(导出选项) 在CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType) 在F:\myapp\BLL\Home\HomeBLLC.CS中的myapp.BLL.Home.HomeBLLC.GetPDFStream(ReportClass rptClass)中:第1082行

在F:\myapp\Controllers\ComplaintController.cs:行709中的myapp.Controllers.ComplaintController.GetComplaintFile(字符串ComplaintNumber)处 在F:\myapp\Controllers\ComplaintController.cs中的myapp.Controllers.ComplaintController.Complaint()处:第76行 在lambda_方法上(ExecutionScope、ControllerBase、Object[]) 位于System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object[]参数) 在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary
2个参数)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext、ActionDescriptor ActionDescriptor、IDictionary
2个参数) 在System.Web.Mvc.ControllerActionInvoker.c_DisplayClassd.b_a()中 位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter筛选器、ActionExecutingContext预文本、Func
1 continuation)
在System.Web.Mvc.ControllerActionInvoker.c_uudisplayClassd.c_uuudisplayClassf.b_uuc()中
位于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 report


提前感谢

我错过了基本的东西,在研究了相关问题后,我知道我忘记了在配置crystal report方法中提供必要的身份验证 我的修改方法如下

    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(“我的用户名”、“我的密码”); 我的代码和它的工作。 不知道为什么我必须再次进行身份验证,因为我已经在DSN中进行了身份验证。欢迎提出任何建议