枚举SSRS报告中数据的结果视图

时间:2012-05-03 15:34:20

标签: c# xml

我必须清点大约400个报告,我需要做的是从报告中提取所有sql。我能够在XmlDocument中加载结果并在VS中导航信息并找到我正在寻找的信息。

在每个报告中,我都必须点击Results View

我必须深入查看以下元素的结果视图。

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

我正在尝试使用元素命令文本,但我不确定如何激活或访问该级别。这是我正在使用的代码:

 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)
                    {


                    }

                }

            }

2 个答案:

答案 0 :(得分:0)

我真的不知道你在追求什么,我还没有看到你的XML结构,所以我猜错了,这可能不是最佳/功能但是如果你不需要,那么有趣的是什么调整一下吧?

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

如果您需要更多帮助,请发布原始XML的示例:)

答案 1 :(得分:0)

您可以在报告中显示报告服务器报告。请参阅jcoe关于主页上的XML查询的论坛帖子»文章讨论»作者的文章讨论»讨论Michael Davis发布的内容»报告服务器诊断报告Page 9Page 10

或者继续使用当前的方法,这是一个Linq查询,它将从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 };