title: database login prompt with crystal reports
body: <p>I'm trying to display some <strong>report</strong> with some <strong>subreports</strong> inside it, but every it shows the report it throws some dialog box asking for database connection. I'm using this code:</p>
  
  <pre><code>private void frmReporte_Load(object sender, System.EventArgs e)
      {
          Clave = ConfigurationSettings.AppSettings["Password"].ToString();
          NombreBD = ConfigurationSettings.AppSettings["CatalogBD"].ToString();
          NombreServidor = ConfigurationSettings.AppSettings["Servidor"].ToString(); ;
          UsuarioBD = ConfigurationSettings.AppSettings["UserID"].ToString();
          this.crtReportes.ReportSource = this.prepareReport();
      }
      public void imprimirReporte()
      {
          ReportDocument rpt = new ReportDocument();
          rpt.Load(mvarRutaReporte);
          rpt.SetDataSource(clsReportes.dsReporte);
          rpt.PrintToPrinter(1, false, 1, 1);
      }
      private ReportDocument prepareReport()
      {
          Sections crSections;
          ReportDocument crReportDocument, crSubreportDocument;
          SubreportObject crSubreportObject;
          ReportObjects crReportObjects;
          ConnectionInfo crConnectionInfo;
          Database crDatabase;
          Tables crTables;
          TableLogOnInfo crTableLogOnInfo;
          crReportDocument = new ReportDocument();
          crReportDocument.Load(RutaReporte);
          crReportDocument.SetDataSource(clsReportes.dsReporte.Tables[0]);
          crDatabase = crReportDocument.Database;
          crTables = crDatabase.Tables;
          crConnectionInfo = new ConnectionInfo();
          crConnectionInfo.ServerName = NombreServidor ;
          crConnectionInfo.DatabaseName = NombreBD;
          crConnectionInfo.UserID = UsuarioBD;
          crConnectionInfo.Password = Clave;
          foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables)
          {
              crTableLogOnInfo = aTable.LogOnInfo;
              crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
              aTable.ApplyLogOnInfo(crTableLogOnInfo);
          }
          // Para los reportes que poseen subreportes 
          // pongo el objeto seccion del la seccion actual del reporte 
          crSections = crReportDocument.ReportDefinition.Sections;
          // busco en todas las secciones el objeto reporte
          foreach (Section crSection in crSections)
          {
              crReportObjects = crSection.ReportObjects;
              //busco en todos los reportes por subreportes
              foreach (ReportObject crReportObject in crReportObjects)
              {
                  if (crReportObject.Kind == ReportObjectKind.SubreportObject)
                  {
                      crSubreportObject = (SubreportObject)crReportObject;
                      //abro el subreporte y me logeo con los datos del reporte general
                      crSubreportDocument = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);
                      crDatabase = crSubreportDocument.Database;
                      crTables = crDatabase.Tables;
                      foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables)
                      {
                          crTableLogOnInfo = aTable.LogOnInfo;
                          crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
                          aTable.ApplyLogOnInfo(crTableLogOnInfo);
                      }
                  }
              }
          }
          return crReportDocument;
      }
  </code></pre>