[英]C# Parse SSIS Column from SSIS Package
我成功地从输入集合集合中解析列的缓存名称,如下所示:
DtsWrapper.MainPipe m = (DtsWrapper.MainPipe)TH.InnerObject;
DtsWrapper.IDTSComponentMetaDataCollection100 mdc = m.ComponentMetaDataCollection;
foreach (DtsWrapper.IDTSComponentMetaData100 md in mdc)
{
IDTSInput100 input = md.InputCollection[0];
foreach (IDTSInputColumn100 column in input.InputColumnCollection)
{
treeView1.Nodes["Executables"].Nodes[TH.Name].Nodes[md.Name].Nodes.Add(column.Name, column.Name);
}
}
我不知道如何解析 externalMetadataColumnId 和 lineageid。 这是 package xml。 有什么建议么?
<inputColumns>
<inputColumn
refId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].Columns[guid]"
cachedDataType="guid"
cachedName="guid"
externalMetadataColumnId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].ExternalColumns[accountid]"
lineageId="Package\Data Flow Task\OLE DB Source.Outputs[OLE DB Source Output].Columns[guid]" />
<inputColumn
refId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].Columns[cr031_accountseed]"
cachedDataType="wstr"
cachedLength="20"
cachedName="cr031_accountseed"
externalMetadataColumnId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].ExternalColumns[xxc_account_alt_id]"
lineageId="Package\Data Flow Task\OLE DB Source.Outputs[OLE DB Source Output].Columns[cr031_accountseed]" />
</inputColumns>
谢谢
如果你已经在一个字符串中有这个,这很简单:
<inputColumns>
<inputColumn
refId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].Columns[guid]"
cachedDataType="guid"
cachedName="guid"
externalMetadataColumnId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].ExternalColumns[accountid]"
lineageId="Package\Data Flow Task\OLE DB Source.Outputs[OLE DB Source Output].Columns[guid]" />
<inputColumn
refId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].Columns[cr031_accountseed]"
cachedDataType="wstr"
cachedLength="20"
cachedName="cr031_accountseed"
externalMetadataColumnId="Package\Data Flow Task\Dynamics CRM Destination.Inputs[Input].ExternalColumns[xxc_account_alt_id]"
lineageId="Package\Data Flow Task\OLE DB Source.Outputs[OLE DB Source Output].Columns[cr031_accountseed]" />
</inputColumns>
构建 class 以将数据加载到 object 中:
[XmlRoot(ElementName="inputColumn")]
public class InputColumn {
[XmlAttribute(AttributeName="refId")]
public string RefId { get; set; }
[XmlAttribute(AttributeName="cachedDataType")]
public string CachedDataType { get; set; }
[XmlAttribute(AttributeName="cachedName")]
public string CachedName { get; set; }
[XmlAttribute(AttributeName="externalMetadataColumnId")]
public string ExternalMetadataColumnId { get; set; }
[XmlAttribute(AttributeName="lineageId")]
public string LineageId { get; set; }
[XmlAttribute(AttributeName="cachedLength")]
public string CachedLength { get; set; }
}
[XmlRoot(ElementName="inputColumns")]
public class InputColumns {
[XmlElement(ElementName="inputColumn")]
public List<InputColumn> InputColumn { get; set; }
}
然后在你的代码中使用这个:
XmlSerializer serializer = new XmlSerializer(typeof(InputColumns));
using (StringReader reader = new StringReader([your column]))
{
InputColumns xml= (InputColumns )(serializer.Deserialize(reader));
[now you can use xml object to get whatever you want]
//this is you most likely use case
foreach(var col in xml.inputColumn)
{....}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.