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