Hola,
Tengo un informe de Crystal que cargaba un archivo DBF, pero quiero cambiar la conexión a SQL en tiempo de ejecución a través de RAS. A continuación se muestra el código que encontré en el foro de SAP, pero sigo recibiendo el mensaje "Error al cargar la información de la base de datos".. ¿Qué podría estar mal aquí?
Gracias,
CrystalDecisions.CrystalReports.Engine.ReportDocument myReport2 = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
protected void Page_Load(object sender, EventArgs e) {
try {
myReport2.Load( Server.MapPath( "CRDBase.rpt" ) );
ISCDReportClientDocument reportClientDocument = myReport2.ReportClientDocument;
ISCDReportClientDocument rcd;
rcd = reportClientDocument;
reportClientDocument.DatabaseController.LogonEx( "SQL2008R2", "CR", "smisreader", "pass@word1" );
//Crear el PropertyBag de inicio de sesión para la conexión que deseamos utilizar
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag logonDetails = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
logonDetails.Add( "Auto Translate", -1 );
logonDetails.Add( "Connect Timeout", 15 );
logonDetails.Add( "Data Source", "SQL2008R2" );
logonDetails.Add( "General Timeout", 0 );
logonDetails.Add( "Initial Catalog", "CR" );
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 );
logonDetails.Add( "Owner", "dbo" ); // esquema
//Crear el PropertyBag de motor de consulta con los detalles del proveedor y el PropertyBag de inicio de sesión
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag QE_Details = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();
QE_Details.Add( "Database DLL", "crdb_ado.dll" );
QE_Details.Add( "QE_DatabaseName", "CR" );
QE_Details.Add( "QE_DatabaseType", "OLE DB (ADO)" );
QE_Details.Add( "QE_LogonProperties", logonDetails );
QE_Details.Add( "QE_ServerDescription", "SQL2008R2" );
QE_Details.Add( "QE_SQLDB", "True" );
QE_Details.Add( "SSO Enabled", "False" );
QE_Details.Add( "Owner", "dbo" );
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;
reportClientDocument.ReplaceConnection( oldConnInfo, newConnInfo, null, CrystalDecisions.ReportAppServer.DataDefModel.CrDBOptionsEnum.crDBOptionDoNotVerifyDB );
}
CrystalReportViewer2.ReportSource = myReport2;
}
catch( Exception ex ) {
}
}