2017-09-19 7 views
1

私は、テスト目的のサンプルテーブルの1つとしてSSISでColumn Null Ratio Profile requestを要求しましたが、XML形式のInclusion Reportを問題なく使用しましたが、どのようにして<NullCount>をレポートごとに利用できますか選択した列の?または、どのようにして、要求されたすべての列についてヌル・ポピュレーション情報を抽出できますか?データプロファイリングからのSSIS抽出値タスク結果

以下

タスクから生成されたXMLレポートの一部です:

<Profiles> 
     <ColumnNullRatioProfile ProfileRequestID="NullRatioReq" IsExact="true"> 
     <DataSourceID>{AD39E650-3865-4703-89AB-B9D8D7A83CB3}</DataSourceID> 
     <Table DataSource="njpp-dm02" Database="Reporting" Schema="dbo" Table="Error" RowCount="6" /> 
     <Column Name="Error" SqlDbType="VarChar" MaxLength="-1" Precision="255" Scale="255" LCID="1033" CodePage="0" IsNullable="true" StringCompareOptions="0" /> 
     <NullCount>0</NullCount> 
     </ColumnNullRatioProfile> 
     <ColumnNullRatioProfile ProfileRequestID="NullRatioReq" IsExact="true"> 
     <DataSourceID>{AD39E650-3865-4703-89AB-B9D8D7A83CB3}</DataSourceID> 
     <Table DataSource="njpp-dm02" Database="Reporting" Schema="dbo" Table="Error" RowCount="6" /> 
     <Column Name="Runtime" SqlDbType="DateTime" MaxLength="0" Precision="255" Scale="255" LCID="-1" CodePage="0" IsNullable="true" StringCompareOptions="0" /> 
     <NullCount>0</NullCount> 
     </ColumnNullRatioProfile> 
    </Profiles> 

上記のXMLコードから、あなたは私がそれに続い<NullCount>は私が必要とする値であると考えてい<Column Name = "Error"...>から見ることができるよう抽出する(それは正しい結果です)。

私はそのXMLレポートを処理するためにC#コードの下で試してみましたが、有用な情報なしで私にエラーがスローされ、複数の列があるかどうか、どのように取得するか、結果の

C#コード:

//code before 

using System.XML; 

//code after 

public void Main() 
     { 


      String InclusionRpt = Dts.Variables["User::InclusionRpt"].Value.ToString(); 

      XmlDocument xml = new XmlDocument(); 

      xml.LoadXml(InclusionRpt); 

      XmlNodeList nodelist = xml.GetElementsByTagName("NullCount"); 

      int i = 0; 

      for (i = 0; i <= 1; i++) 
      { 
       if (i == 0)  
        { 
         MessageBox.Show("The total number of Null found in \"Error\" is " + nodelist[i].InnerText); 
        } 
       if (i == 1) 
        { 
         MessageBox.Show("The total number of Null found in \"RunTime\" is " + nodelist[i].InnerText); 
        } 
       } 
      } 

      Dts.TaskResult = (int)ScriptResults.Success; 
     } 

だからもう一度、短期での質問、どのように私は、これらの二つの列(エラー、およびランタイム)にnull人口を示すことができましたか?おかげで:)

+0

既存のコードが返すエラーは何ですか? –

+0

@TabAllemanは、 '例外は呼び出しのターゲットによってスローされました'と言っていますが、 'XmlNodeList nodelist = xml.GetElementsByTagName(" NullCount ");のために起こった問題を特定しました。このタグを取得する – LONG

+0

'LoadXML'行の後にスクリプトにブレークポイントを置き、' xml'の値を見ると、期待されるXMLが入っていますか? –

答えて

1

MSDN documentationの例によると、既存のコードが唯一の彼らが提供するサンプルコードから小さな差のカップルがあります:

  1. xml.LoadXml(InclusionRpt);を - MSDNの例は.Load()代わりの.LoadXmlを使用しています。また、変数xmlの名前を付けることは予約語なので問題になるかどうかも疑問です。

  2. nodelist[i].InnerText - MSDNは、.InnerTextの代わりに.InnerXmlを使用します。私はこれが問題であるとは思わないが、サンプルMSDNコードとの違いです。

サンプルコードから、あなたの違いは非常にマイナーなので、私はあなたがいずれかをロードしようとしている文書が全くロードされていない可能性が最も高い疑われる、またはその文書の内容がないことを彼らが言っていること。

デバッガを使用できない場合は、ロード後にxmlの内容を表示するために、MessageBoxなどのプログラム方法を使用してみます。

+0

この質問をフォローしてくれてありがとう@Tab Allenman、ありがとうございました。完全包含XMLが正しく読み込まれなかったので、ここでいくつかの点について言及したいだけです。 'XML'テキストに' .LoadXml'メソッドを使うべきです;変数名 'xml'はここで良いです。最後に、 '.InnerText'を使ってテキストを抽出する必要があります:) – LONG

関連する問題