从SSIS脚本任务中的COM对象XML结果集访问属性

时间:2015-06-23 16:38:49

标签: ssis

我正在使用已提供的SSIS包。对我来说。我需要从SSIS变量中提取XML数据,但我找不到办法。

当我在脚本任务中运行时遇到断点时,我可以将鼠标悬停在变量的Value属性上。这显示了一个COM对象。当我展开COM对象以查看其属性时,我在名为" xml"的属性中看到了我需要的XML数据。我如何从代码中获取此属性?

var xmldata = Dts.Variables["User::MyVariableName"].Value;
//xmldata is a COM object with no properties available at design time

以下是我的尝试:

  • 根据我在网上看到的示例将值写入文件。 这只是写" System .__ ComObject"到文件

  • 将COM对象转换为MarshalByRefObject。这没有给我 不再有用于检索属性的选项

  • 将COM对象设置为" dynamic"变量。这给了我一个 编译时错误

  • 反映COM对象以获取其属性
    (的GetProperties())。 COM对象不支持这个,所以我回来了 一个0长度数组

  • 将结果集从XML更改为DataSet并填充DataTable
    宾语。我收到了一个包含一列和多行
    的DataTable " System.Byte []",这是毫无价值的。

这些都没有成功。

1 个答案:

答案 0 :(得分:0)

好吧,看起来我放弃了使用"动态"太早了。

确保添加对" Microsoft.CSharp"的引用,然后执行以下代码:

var data = Dts.Variables["User::MyVariableName"]; //Assuming not null. 
var comObject = ((dynamic)data.value);
var propertyValue = comObject.PropertyYouNeed;  

确保从COM对象检索的属性拼写正确。拼写错误在运行时才会被捕获。