gpt4 book ai didi

c# - 从 SSIS 2012 脚本组件中的 PipelineBuffer 获取列名称

转载 作者:太空宇宙 更新时间:2023-11-03 19:08:56 25 4
gpt4 key购买 nike

我试图从脚本组件转换为 SSIS 的 PipelineBuffer 中获取列名称和索引,并将它们添加到哈希表中。我知道这是可能的,如果我将我的类从:public class ScriptMain : UserComponent 更改为 ScriptMain : PipelineComponent 并使用此代码:

public override void ProcessInput(int InputID, Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer Buffer)
{
inputBuffer = Buffer;
hash = new Hashtable();
IDTSInput100 i = ComponentMetaData.InputCollection.GetObjectByID(InputID);
foreach (IDTSInputColumn100 col in i.InputColumnCollection)
{
int colIndex = BufferManager.FindColumnByLineageID(i.Buffer, col.LineageID);
hash.Add(col.Name, colIndex);
}
}

但是;当我这样做时,我不能再覆盖: IDTSConnectionManager100 connMgr = this.Connections.DbConnection; 据我所知,BufferManager 在 UserComponent 类中不可用。有没有办法使用 UserComponent 来完成此操作?

最佳答案

我的好友与我一起解决了这个问题。您可以像这样获取脚本缓冲区中列的名称:

public override void Input0_ProcessInputRow(Input0Buffer inputBufferRow)
{
foreach (IDTSInputColumn100 column in this.ComponentMetaData.InputCollection[0].InputColumnCollection)
{
PropertyInfo columnValue = inputBufferRow.GetType().GetProperty(column.Name);
}
}

您可以通过在脚本组件中使用反射并将它们加载到过滤列表中来获取脚本缓冲区中的列索引和名称,如下所示:

IList<string> propertyList = new List<string>();
var properties = typeof(Input0Buffer).GetProperties();
foreach (var property in properties)
{
if (!property.Name.EndsWith("_IsNull"))
propertyList.Add(property.Name);
}

然后您可以使用 PropertyInfo 对象的名称访问列表以获取脚本缓冲区中的索引值:

int index = (propertyList.IndexOf(columnValue.Name));

为了将其与输入管道缓冲区中的列索引链接起来,您需要创建一个类属性:

int[] BufferColumnIndexes; 

然后覆盖 ProcessInput 并从映射到脚本缓冲区索引的输入管道缓冲区添加索引:

public override void ProcessInput(int InputID, Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer Buffer)
{
inputBuffer = Buffer;
BufferColumnIndexes = GetColumnIndexes(InputID);
base.ProcessInput(InputID, Buffer);
}

现在把它们联系起来:

int index = (propertyList.IndexOf(columnValue.Name)); //index in script buffer
int index2 = (BufferColumnIndexes[index]); //index in input pipeline buffer

关于c# - 从 SSIS 2012 脚本组件中的 PipelineBuffer 获取列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com