Je dois être en mesure de définir une source de données pour les types Access et xBase dans un fichier RPT que j'ai chargé dans une application .NET.Comment définir les emplacements de fichiers de manière programmée dans une application C# .NET pour Crystal XI R2 pour les fichiers Access ou DBASE?
J'ai déjà essayé.
CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument1 = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
reportDocument1.Load(@"C:\MyCrystal.rpt", CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy);
string Constr = "MyConnectionString";
// initialize an object to pull out the needed pieces for the login information.
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(ConStr);
// Turn off integrated Security
foreach (IConnectionInfo i in reportDocument1.DataSourceConnections)
{
i.IntegratedSecurity = false;
}
// Set the LogonInfo for each Data Source
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in reportDocument1.Database.Tables)
{
TableLogOnInfo logOnInfo = CrTable.LogOnInfo;
String dbtype = logOnInfo.ConnectionInfo.Attributes.Collection.LookupNameValuePair("QE_DatabaseType").Value.ToString().Trim();
if (dbtype.Equals("xBase"))
{
NameValuePairs2 lp = logOnInfo.ConnectionInfo.LogonProperties;
foreach (NameValuePair2 nvp in lp)
{
if (nvp.Name.ToString().Trim().Equals("Data File"))
nvp.Value = @"C:\MyDbaseFile.dbf";
}
CrTable.ApplyLogOnInfo(logOnInfo);
}
else if (dbtype.Equals("OLE DB (ADO)"))
{
bool sql = true;
NameValuePairs2 lp = logOnInfo.ConnectionInfo.LogonProperties;
NameValuePair2 prov = lp.LookupNameValuePair("Provider");
if (!prov.Value.ToString().ToUpper().Equals("SQLOLEDB"))
{
sql = false;
NameValuePair2 ds = lp.LookupNameValuePair("Data Source");
ds.Value = @"C:\MyAccess.mdb";
}
if (sql)
{
// Set the connection information for the table in the report.
logOnInfo.ConnectionInfo.UserID = sb.UserID;
logOnInfo.ConnectionInfo.Password = sb.Password;
logOnInfo.ConnectionInfo.ServerName = sb.DataSource;
logOnInfo.ConnectionInfo.DatabaseName = sb.InitialCatalog;
}
CrTable.ApplyLogOnInfo(logOnInfo);
}
}
reportDocument1.VerifyDatabase();
reportDocument1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, @"C:\MyTest.pdf");
je reçois un LogOnException sur le VerifyDatabase() (ou si ce n'est pas là, le ExportToDisk) J'ai jetés les valeurs avant et après et je vois le changement ... mais je dois faire quelque chose faux. S'il vous plaît aider!