Vista de resultados de enumeración para datos en un informe de SSRS

Tengo que inventariar unos 400 informes, y lo que debo hacer es sacar todo el sql de los informes. Puedo XmlDocument cargar los resultados y navegar por la información en VS y encontrar la información que estoy buscando.

En cada informe tengo que hacer clic Results View

Tengo que desglosar la vista de resultados para los siguientes Elementos.

{Element, Name="Report"}
{Element, Name="DataSet"}
{Element, Name="Query"}
{Element, Name="Command Text"}

Estoy tratando de llegar al texto de comando elemental, pero no estoy seguro de cómo enurmar o acceder a ese nivel. aquí está el código que estoy usando:

 string[] Fil_Info = Directory.GetFiles(dir);
            foreach (string file in Fil_Info)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(file);
                //Console.WriteLine(doc.Value.ToString());
                XmlAttributeCollection attrColl =doc.DocumentElement.Attributes;
                foreach (XmlAttribute xmlAtt in attrColl)
                {
                    XmlAttributeCollection attrColl2 = xmlAtt.Attributes;
                    foreach (XmlAttribute xmlAtt2 in attrColl2)
                    {


                    }

                }

            }

preguntado el 03 de mayo de 12 a las 16:05

¿Puede dar un ejemplo de cómo está estructurado el XML? Creo que querrás usar extensiones LINQ, por ejemplo .Descendants(...), pero no estoy seguro exactamente de cómo aconsejarte sin más detalles. -

@TimS. Ni siquiera estoy seguro de cómo proporcionar la estructura, sé que en el nivel de "Texto de comando" el innerxml es lo que necesito:

2 Respuestas

Realmente no sé lo que busca y no he visto la estructura de su XML, así que estoy haciendo una suposición descabellada y probablemente esto no sea óptimo/funcional, pero bueno, ¿cuál es la diversión si no necesita modificarlo? ¿derecho?

IEnumerable<XElement> GetCommandText(string file)
    {
    XDocument xdoc = XDocument.Load(file);
    return xdoc.Root.Elements().Where(r => (string)r.Attribute("Name") == "Command Text");
    }

si desea más ayuda, por favor publique un ejemplo de cómo se ve el XML original :)

contestado el 03 de mayo de 12 a las 17:05

Puede hacer que el servidor de informes informe sobre los informes. Vea las publicaciones del foro de jcoe sobre Consultas XML en Inicio » Discusiones de artículos » Discusiones de artículos por autor » Discutir el contenido publicado por Michael Davis » Informes de diagnóstico del servidor de informes página 9 y página 10.

O para continuar con su enfoque actual, aquí hay una consulta de Linq que analizará lo que busca del archivo rdl:

        XNamespace reportDefinition = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";
        XNamespace reportDesigner = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";

        XDocument reportXml = XDocument.Load(@"MyReport.rdl");

        var reportQueries = from XElement dataSetElement in reportXml.Element(reportDefinition + "Report").Element(reportDefinition + "DataSets").Elements(reportDefinition + "DataSet")
                            let dataSetName = dataSetElement.Attribute("Name").Value
                            let queryCommandText = dataSetElement.Element(reportDefinition + "Query").Element(reportDefinition + "CommandText").Value
                            let queryDataSourceName = dataSetElement.Element(reportDefinition + "Query").Element(reportDefinition + "DataSourceName").Value
                            select new { DataSetName = dataSetName, QueryCommandText = queryCommandText, QueryDataSourceName = queryDataSourceName };

contestado el 03 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.