Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net中的Crystal Report 2011登录提示_Asp.net_Sql Server 2008_Iis 7_Crystal Reports - Fatal编程技术网

asp.net中的Crystal Report 2011登录提示

asp.net中的Crystal Report 2011登录提示,asp.net,sql-server-2008,iis-7,crystal-reports,Asp.net,Sql Server 2008,Iis 7,Crystal Reports,我们使用的是Crystal Reports 2011和SQL Server 2008(Windows 7 64位)。每当我尝试在IIS中部署crystal reports时,它总是提示输入数据库登录信息。我已经尝试了以下选项 在代码中设置登录信息 将IIS应用程序池设置为LocalService 什么都不管用。这是密码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)

我们使用的是Crystal Reports 2011和SQL Server 2008(Windows 7 64位)。每当我尝试在IIS中部署crystal reports时,它总是提示输入数据库登录信息。我已经尝试了以下选项

  • 在代码中设置登录信息
  • 将IIS应用程序池设置为LocalService
  • 什么都不管用。这是密码

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ConfigureCrystalReports();
            }
            else
            {
                ReportDocument doc = Session["Report"] as ReportDocument;
                SetLogon(doc);
                CrystalReportViewer1.ReportSource = doc;
                CrystalReportViewer1.RefreshReport();
            }
        }
    
        private void ConfigureCrystalReports()
        {
    
            ReportDocument reportDoc;
            if (!IsPostBack)
            {
                reportDoc = new ReportDocument();
                reportDoc.Load(Server.MapPath("~/Sample.rpt"));
                Session.Add("Report", reportDoc);
            }
            else
            {
                reportDoc = Session["Report"] as ReportDocument;
            }
    
            SetLogon(reportDoc);
    
            CrystalReportViewer1.ReportSource = reportDoc;
            CrystalReportViewer1.RefreshReport();
        }
    
        private void SetLogon(ReportDocument reportDoc)
        {
            var connectionInfo1 = new ConnectionInfo()
            {
                ServerName = @"ODBCDSN",
                DatabaseName = "hrdw_old",
                IntegratedSecurity = true
            };
    
            SetDBLogonForReport(connectionInfo1, reportDoc);
        }
    
        private void SetDBLogonForReport(ConnectionInfo connectionInfo1, ReportDocument reportDocument)
        {
            Tables tables = reportDocument.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
            {
                TableLogOnInfo tableLogonInfo = table.LogOnInfo;
    
                tableLogonInfo.ConnectionInfo = connectionInfo1;
                tableLogonInfo.ConnectionInfo.Type = ConnectionInfoType.SQL;
                table.ApplyLogOnInfo(tableLogonInfo);
    
    
            }
            reportDocument.SetDatabaseLogon(connectionInfo1.UserID, connectionInfo1.Password);
        }
    }
    
    在IIS中尝试的步骤: 应用程序池:ASP.NET 4.0默认应用程序池 还启用了IIS中的Windows身份验证并禁用了匿名身份验证。 仅尝试匿名身份验证。 SQL Server同时具有windows和SQL Server身份验证

    我将无法使用数据集,因为crystal报表将由使用命令对象的人开发。它在VisualStudio2010环境中工作得非常好。但在IIS中不起作用

    我缺少一些基本的东西吗?感谢您的帮助

    谢谢


    Shankar.

    这是如何解决的。这是一种变通办法

    CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc = doc.ReportClientDocument;
    
            CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rcd = rptClientDoc;
    
            string server = @"<SERVER>";
            string db = "<DATABASE>";
            string user = "<USER>";
            string pass = "PASSWORD";
    
            rptClientDoc.DatabaseController.LogonEx(server, db, user, pass);
    
            //Create the logon propertybag for the connection we wish to use
            CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag logonDetails = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
            logonDetails.Add("Auto Translate", -1);
            logonDetails.Add("Connect Timeout", 15);
            logonDetails.Add("Data Source", server);
            logonDetails.Add("General Timeout", 0);
            logonDetails.Add("Initial Catalog", db);
            logonDetails.Add("Integrated Security", "false");
            logonDetails.Add("Locale Identifier", 1033);
            logonDetails.Add("OLE DB Services", -5);
            logonDetails.Add("Provider", "SQLOLEDB");
            logonDetails.Add("Use Encryption for Data", 0);
    
            //Create the QE (query engine) propertybag with the provider details and logon property bag.
            CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag QE_Details = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
            QE_Details.Add("Database DLL", "crdb_ado.dll");
            QE_Details.Add("QE_DatabaseName", db);
            QE_Details.Add("QE_DatabaseType", "OLE DB (ADO)");
            QE_Details.Add("QE_LogonProperties", logonDetails);
            QE_Details.Add("QE_ServerDescription", server);
            QE_Details.Add("QE_SQLDB", "True");
            QE_Details.Add("SSO Enabled", "False");
    
            CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo newConnInfo = new CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
            CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfo;
            CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfos oldConnInfos;
    
            oldConnInfos = rcd.DatabaseController.GetConnectionInfos(null);
            for (int I = 0; I < oldConnInfos.Count; I++)
            {
                oldConnInfo = oldConnInfos[I];
                newConnInfo.Attributes = QE_Details;
                newConnInfo.Kind = CrystalDecisions.ReportAppServer.DataDefModel.CrConnectionInfoKindEnum.crConnectionInfoKindCRQE;
                try
                {
                    rcd.DatabaseController.ReplaceConnection(oldConnInfo, newConnInfo, null, CrystalDecisions.ReportAppServer.DataDefModel.CrDBOptionsEnum.crDBOptionDoNotVerifyDB);
                }
                catch (Exception ex)
                {
                    Label1.Text = ex.Message;
                    return;
                }
    
            }
    
            doc.SetDatabaseLogon(user, pass);
    
    CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc=doc.ReportClientDocument;
    CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rcd=rptClientDoc;
    字符串服务器=@“”;
    字符串db=”“;
    字符串user=“”;
    字符串pass=“PASSWORD”;
    rptClientDoc.DatabaseController.LogonEx(服务器、数据库、用户、通行证);
    //为我们希望使用的连接创建登录属性Bag
    CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag logonDetails=新建CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
    添加(“自动翻译”,-1);
    添加(“连接超时”,15);
    添加(“数据源”,服务器);
    添加(“常规超时”,0);
    添加(“初始目录”,db);
    logonDetails.Add(“集成安全”、“假”);
    添加(“区域设置标识符”,1033);
    添加(“OLE DB服务”,-5);
    添加(“提供者”、“SQLOLEDB”);
    添加(“对数据使用加密”,0);
    //使用提供者详细信息和登录属性包创建QE(查询引擎)属性包。
    CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag QE_Details=新的CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
    添加(“数据库DLL”、“crdb_ado.DLL”);
    QE_详情。添加(“QE_数据库名称”,db);
    添加(“QE_数据库类型”、“OLE DB(ADO)”;
    QE_详情。添加(“QE_LogonProperties”,logonDetails);
    添加(“QE_服务器描述”,服务器);
    QE_详情。添加(“QE_SQLDB”,“True”);
    QE_详细信息。添加(“启用SSO”、“错误”);
    CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo newConnInfo=新建CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
    CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfo;
    CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfos;
    oldconnfos=rcd.DatabaseController.getConnectionInfo(null);
    for(int I=0;I
    为了确保根本没有登录提示,首先我必须登录到控制器,然后设置所有登录凭据。请确保在回发期间重新使用登录凭据。完成此操作后,还可以使用reportdocument登录。这解决了登录提示一次又一次出现的问题

    谢谢


    Shankar

    设置属性EnableDatabaseLogonCompt=False。