繁体   English   中英

C# 从 SSIS 中解析 SSIS 列 Z209802FB858E2C83205027DBBB5D9EC6

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM