3

我正在尝试获取 SSIS 包中输出列的 lineageId。我在 C# 代码中将 SSIS 包作为 XML 文档进行遍历。

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

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

请澄清我的疑问。lineageid 是字符串还是整数?

如果它是 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").Value”返回以下值

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

4

1 回答 1

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 包抛出的错误消息。

希望这可以帮助!

于 2013-07-05T13:52:24.440 回答