Источник данных Crystal Report, установленный ConnectionInfo, не устанавливается - не подключается к нужной базе данных - PullRequest
0 голосов
/ 22 июля 2011

У меня есть 8 отчетов, использующих один и тот же код для установки источника данных отчетов, из которых 5 отчетов работают и могут указывать на рабочую среду.Остальные 3 отчета, которые я запускал и повторно запускал проверку базы данных и обновление базы данных, все же, когда я запускаю эти отчеты на производстве, они возвращают данные из среды DEV.

Вот как устанавливается мой источник данных.Я называю хранимую процедуру во всех 8 кристаллических отчетах.Я провел очень детальную отладку и убедился, что данные источника данных получают правильную информацию, а что отсутствует.

            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;
        }
    }

1 Ответ

1 голос
/ 29 сентября 2011

Отчеты, которые работают, уже указывают на ваш прод-сервер.Вы применяете учетные данные для входа, только если сервер, сохраненный в отчете, совпадает с именем сервера, который вы пытаетесь установить.Изменить на следующее:

// 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);
  }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...