我正在尝试在SSIS包中获取输出列的lineageId。我正在使用C#代码遍历SSIS包作为XML文档。
在从程序包中的节点遍历和获取数据时没有问题,但在我尝试获取LineageID时遇到问题。
我的许多论坛和文章都说SSIS包中生成的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);
}
}
通过使用Breakpoint调试“output.Attribute(”lineageId“)。值”返回值
“Package \ DFT \ SRC.Outputs [OLE DB Source Output] .Columns [TYPE]”
答案 0 :(得分: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包引发的错误消息。
希望这有帮助!