reportdocument - load report crystal reports c#
Extrayendo SQL de los archivos de Crystal Report (1)
Probablemente esto se deba a que el archivo de informe contiene un DataSet como origen y no como una consulta de SQL incorporado.
Probé el código con 2 archivos de informe, un archivo con consulta SQL incorporada y un archivo vinculado a un DataSet.
Las siguientes imágenes muestran el contenido de la ventana de QuickWatch para la table
variables después de realizar la comparación ClassName
.
Informe que contiene una consulta SQL como fuente
muestra ClassName = "CrystalReports.CommandTable"
Informe que contiene un DataSet como fuente
muestra ClassName = "CrystalReports.Table"
Estoy tratando de extraer el SQL seleccionado de los archivos .rpt
de Crystal Report usando C # .net. Por eso, me refiero al SQL que verá cuando vaya a Database > Show SQL Query
en el menú en Crystal Report. Seguí la solución de otra pregunta SO , pero parece que no estoy obteniendo el mismo resultado. Estoy usando este conjunto de código:
foreach (string file in Directory.GetFiles("c://projects//Reports", "*.rpt"))
{
Console.WriteLine(String.Format("Processing {0}...", file));
var doc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
doc.Load(file);
foreach (dynamic table in doc.ReportClientDocument.DatabaseController.Database.Tables)
{
if (table.ClassName == "CrystalReports.CommandTable")
{
//I will never reach here because table.ClassName is CrystalReports.Table
string commandSql = table.CommandText;
//TODO: do something with commandSql
}
}
}
Por alguna razón, la variable de table
dinámica en el bucle foreach
es de tipo CrystalReports.Table
lugar del tipo CrystalReports.CommandTable
. Y entonces, no tengo acceso a la propiedad CommandText
.
Lo más parecido al tipo de Table
es que podría obtener los nombres de las tablas en el SQL del informe, pero no las columnas seleccionadas.
¿Cómo puedo extraer las columnas y tablas de las respectivas columnas del SQL en un archivo Crystal Report?
Estoy usando Crystal Report .NET SDK 13.0.9 para Visual Studio 2013.