SSIS脚本组件C#:我们可以使用System.Reflection来查找输入列的缓冲区长度吗?

时间:2013-09-23 06:36:08

标签: c# sql-server ssis etl

通常,在SSIS组件内,“String”类型的输入列具有用户定义的长度。

我的Output0Buffer中的示例,我有Column1 DataType = Unicode字符串[DT_WSTR]长度= 15。

在SSIS程序(C#)中,是否可以通过编程方式找到值“15”?我通常使用System.Reflection来获取数据类型,并使用SetValue方法在缓冲区中分配值。

示例:

foreach (PropertyInfo p in props)
        {
            if (p.GetType() == typeof(string))
            {
                p.SetValue(Output0Buffer, Convert.ToString(value), null);
            }
            ...
        }

但有时,我超过了缓冲区大小,这会引发异常。而不是这个,我希望我能够获得缓冲区长度,所以我可以在将它们分配给缓冲区之前截断它们。


或者,我总是可以采用传统的方式来分配缓冲区的值 即Output0Buffer.Column1 = value.substring(0,15);

但是代码输入太多了:)我宁愿尝试通过Buffer属性循环并相应地填充。

希望你们能帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我相信你正在寻找的东西是这样的:

public override void Input0_ProcessInputRow(Input0Buffer InputBufferRow)
{
     //For InputBuffer
    foreach (IDTSInputColumn100 iColumn in this.ComponentMetaData.InputCollection[0].InputColumnCollection)
    {
        string iName = iColumn.Name;
        string iType = iColumn.DataType.ToString();
        string iLength = iColumn.Length.ToString();
        string iPrecision = iColumn.Precision.ToString();
    }

    //For OutputBuffer
    foreach (IDTSOutputColumn100 oColumn in this.ComponentMetaData.OutputCollection[0].OutputColumnCollection)
    {
        string oName = oColumn.Name;
        string oType = oColumn.DataType.ToString();
        string oLength = oColumn.Length.ToString();
        string oPrecision = oColumn.Precision.ToString();
    }
 }

这些接口在Microsoft.SqlServer.Dts.Pipeline.Wrapper命名空间中可用。除了此处列出的内容外,他们还有其他您可能感兴趣的属性。