我必须清点大约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)
{
}
}
}
答案 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 9和Page 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 };