3

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

例如在我的 Output0Buffer 中,我有 Column1 DataType=Unicode string [DT_WSTR] Length=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 属性循环并相应地填充。

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

4

1 回答 1

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命名空间中可用。除了此处列出的内容之外,它们还有您可能感兴趣的其他属性,以及您尝试执行的操作。

于 2014-08-24T03:24:25.950 回答