C# 未设置ConnectionInfo设置的Crystal report datsource-未连接到正确的数据库

C# 未设置ConnectionInfo设置的Crystal report datsource-未连接到正确的数据库,c#,crystal-reports-2008,C#,Crystal Reports 2008,我有8个报告使用完全相同的代码来设置报告数据源,其中5个报告可以工作,并且能够指向生产环境。其余的3个报告,我已经运行并重新运行了database verify和database update,但当我在生产环境中运行这些报告时,它们会从开发环境中带回数据 下面是如何设置我的数据源的。 我在所有8个crystal报告中调用存储过程。 我已经做了非常详细的调试,并验证了数据源数据是否获得了正确的信息,因此缺少了什么 string database = Configuratio

我有8个报告使用完全相同的代码来设置报告数据源,其中5个报告可以工作,并且能够指向生产环境。其余的3个报告,我已经运行并重新运行了database verify和database update,但当我在生产环境中运行这些报告时,它们会从开发环境中带回数据

下面是如何设置我的数据源的。 我在所有8个crystal报告中调用存储过程。 我已经做了非常详细的调试,并验证了数据源数据是否获得了正确的信息,因此缺少了什么

            string database = ConfigurationManager.AppSettings[env + "Database"].ToString();
            string server = ConfigurationManager.AppSettings[env + "Server"].ToString();


            CrystalReportViewer1.ParameterFieldInfo = fields;
            rptDoc.Load(Server.MapPath(report));


            ConnectionInfo connectionInfo = Reports.GetConnectionInfo(server, database, "userID", "password");


            //connectionInfo.Attributes = attributes;
            connectionInfo.Type = ConnectionInfoType.SQL;
            SetDBLogonForReport(connectionInfo, env);
            CrystalReportViewer1.ReportSource = rptDoc;



 private void SetDBLogonForReport(ConnectionInfo oConnectionInfo, string env)
    {
        try
        {
            TableLogOnInfos oTableLogOnInfos = CrystalReportViewer1.LogOnInfo;
            string[] sparams = new string[]{
            };

            foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in rptDoc.Database.Tables)
            {
                if (oTable.LogOnInfo.ConnectionInfo.ServerName == oConnectionInfo.ServerName)
                {
                    TableLogOnInfo oTableLogOnInfo = oTable.LogOnInfo;

                    oTableLogOnInfo.ConnectionInfo = oConnectionInfo;

                    oTable.ApplyLogOnInfo(oTableLogOnInfo);

                    // oTable.Location = String.Format( "{0}.dbo.{1}", oConnectionInfo.DatabaseName, oTable.Name );

                    bool b = oTable.TestConnectivity();

                    if (!b)
                    {
                        invokeErrorLogger(sparams, env);
                    }
                }
            }

        }
        catch
        {
            throw;
        }
    }

有效的报告已指向prod服务器。仅当报表中存储的服务器与您尝试设置的服务器名称匹配时,您才应用登录凭据。更改为:

// Clear existing connection info first
rptDoc.DataSourceConnections.Clear();

foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in rptDoc.Database.Tables)
{
  var oTableLogonInfo = oTable.LogonInfo;
  oTableLogonInfo.ConnectionInfo = oConnectionInfo;
  oTable.ApplyLogOnInfo(oTableLogonInfo);
  bool b = oTable.TestConnectivity();
  if (!b)
  {
      invokeErrorLogger(sparams, env);
  }
}