C# SSIS从数据分析任务结果中提取值

C# SSIS从数据分析任务结果中提取值,c#,xml,ssis,C#,Xml,Ssis,我在SSIS中为一个样本表请求了一个列空比配置文件请求,用于测试目的,我获得了XML格式的包含报告,没有任何问题,但是我如何从报告中为每个选定列使用?或者如何提取所有请求列的空填充信息 以下是任务生成的XML报告的一部分: <Profiles> <ColumnNullRatioProfile ProfileRequestID="NullRatioReq" IsExact="true"> <DataSourceID>{AD39E

我在SSIS中为一个样本表请求了一个
列空比配置文件请求
,用于测试目的,我获得了XML格式的
包含报告
,没有任何问题,但是我如何从报告中为每个选定列使用
?或者如何提取所有请求列的空填充信息

以下是任务生成的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>

{AD39E650-3865-4703-89AB-B9D8D7A83CB3}
0
{AD39E650-3865-4703-89AB-B9D8D7A83CB3}
0
从上面的XML代码中,正如您从
中所看到的,我相信
后跟它就是我需要提取的值(这是一个正确的结果)

我尝试用下面的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;
        }
//前面的代码
使用System.XML;
//暗号
公共图书馆
{
字符串InclusionRpt=Dts.Variables[“User::InclusionRpt”].Value.ToString();
XmlDocument xml=新的XmlDocument();
LoadXml(InclusionRpt);
XmlNodeList nodelist=xml.GetElementsByTagName(“NullCount”);
int i=0;

对于(i=0;i,根据中的示例,您现有的代码与它们提供的示例代码只有几处小差异:

  • xml.LoadXml(InclusionRpt);
    ——MSDN示例使用
    .Load()
    而不是
    .LoadXml
    。我还怀疑变量
    xml
    的命名是否会因为是保留字而出现问题

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

  • 因为您与示例代码的差异非常小,我怀疑您尝试加载的文档很可能根本没有加载,或者该文档的内容与您所说的不同


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

    您现有的代码返回的错误是什么?@TabAlleman,只是说调用的目标引发了
    异常,但我找到了问题,这是因为使用
    XmlNodeList nodelist=xml.GetElementsByTagName(“NullCount”)
    我认为检索此标记不正确如果您在脚本中的
    LoadXML
    行后放置一个断点,并查看
    xml
    的值,它是否包含预期的xml?@TabAlleman,xml很好,但我无法从中增加值。由于VSTA问题,我无法从VS中调试它。谢谢@Tab Allenman对于这个问题,您是对的,完整包含xml没有正确加载,我只想在这里提到几点,它应该使用
    .LoadXml
    方法来处理
    xml
    文本;变量名
    xml
    在这里很好;最后但并非最不重要的一点是,应该使用
    .InnerText
    :)提取文本