2013-06-20 21 views
3

我正在尝试获取SSIS包中输出列的lineageId。我使用C#代码遍历SSIS包作为XML文档。LineageID是字符串或整数

在遍历和从包中的节点获取数据时没有问题,但在尝试获取LineageID时遇到问题。

我很多论坛和文章都说SSIS包中生成的LineageId是该特定包的唯一整数值​​,所以我试图将LineageID转换为整数值。但它似乎是一个字符串值。

请澄清我的疑问。是lineageid STRING还是INT?

如果是Int,请告诉我如何找到它。

foreach (var x in NodeCollection) 
     { 
    var outputCollection = x.Elements("outputColumn"); 
      foreach (var output in outputCollection) 
      { 
       string Name = output.Attribute("name").Value; 
       long LineageId = Convert.ToInt64(output.Attribute("lineageId").Value); 
      } 
     } 

通过与断点 “output.Attribute(” lineageId “)。值” 调试正在返回下列值

“包\ DFT \ SRC.Outputs [OLE DB源输出] .Columns [TYPE] “

回答

0

我已经执行了一个非常类似的练习,发现沿袭id值肯定是整数。这是从我的代码的摘录:

var nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts"); 
foreach (XmlNode childnode in doc.SelectNodes("//*[@lineageId != '' and @name != '']")) 
    { 
     XmlNode ExecutableNode = childnode.SelectSingleNode("ancestor::DTS:Executable[1]", nsmgr); 
     var taskName = ExecutableNode.SelectSingleNode("DTS:Property[@DTS:Name='ObjectName']", nsmgr).InnerText; 
     var targetColumnName = childnode.Attributes["name"].Value; 
     var lineageID = Convert.ToInt32(childnode.Attributes["lineageId"].Value); 

我们用这列名lineageid的映射,使我们可以解释我们的SSIS包抛出的错误消息。

希望这会有所帮助!

+0

如果没有太多的麻烦,您可以上传一个包含您的代码的样本包吗?我试图实现这是SSIS,但我不断收到“输入字符串不是在一个正确的格式。”错误,就像OP一样,我也得到了LineageID字段的字符串值... 我无法获取SSIS 2012中的错误列名... Thx – 007

相关问题