SSIS从Data Profiling Task结果中提取值

时间:2017-09-19 14:10:03

标签: c# xml ssis

我在SSIS中为我的一个示例表请求Column Null Ratio Profile request用于测试目的,我得到了XML格式的Inclusion Report没有任何问题,但我怎样才能利用<NullCount>来自每个选定列的报告?或者我如何提取所请求的所有列的空填充信息?

以下是从任务生成的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代码中,正如您在<Column Name = "Error"...>中看到的那样,我相信<NullCount>后跟它是我需要提取的值(并且它是正确的结果)。

我尝试使用下面的C#代码来处理该XML报告,但它在没有任何有用信息的情况下抛出错误,我不确定我是否有多列,如何获取或者显示每对的正确方法是什么结果。

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;
        }

再次,简而言之,我怎样才能显示这两列的空数(错误和运行时)?谢谢:))

1 个答案:

答案 0 :(得分:1)

根据MSDN documentation中的示例,您现有的代码与它们提供的示例代码只有一些不同之处:

  1. xml.LoadXml(InclusionRpt); - MSDN示例使用.Load()代替.LoadXml。我还质疑命名变量xml是否会成为一个问题,因为它是一个保留字。

  2. nodelist[i].InnerText - MSDN使用.InnerXml代替.InnerText。我不认为这应该是一个问题,但它与MSDN代码示例不同。

  3. 由于您与示例代码的差异很小,我怀疑您尝试加载的文档很可能根本不加载,或者该文档的内容不是很重要你说的是什么。

    如果您不能使用调试器,我会尝试使用MessageBox或其他一些编程方法在加载后显示xml的内容。