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

レポートに関するレポート サーバー レポートを作成できます。jcoe による XML クエリに関するフォーラム投稿を参照してください

または、現在のアプローチを続行するには、rdl ファイルから何を求めているかを解析する Linq クエリを次に示します。

        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 に答える
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 に答える