0

我必须盘点大约 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)
                    {


                    }

                }

            }
4

2 回答 2

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 的示例 :)

于 2012-05-03T16:06:35.257 回答
0

您可以让报表服务器报告报表。请参阅 jcoe 在主页上的 XML 查询上的论坛帖子 » 文章讨论 » 作者的文章讨论 » 讨论 Michael Davis 发布的内容 » 报告服务器诊断报告第 9页和第 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 };
于 2012-05-03T17:17:33.460 回答