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); を常に行うこともできます。

しかし、それはコードの入力が多すぎるでしょう:)むしろ、バッファプロパティでループスルーして、それに応じて入力したいと思います。

皆さんが私を助けてくれることを願っています。前もって感謝します。

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 に答える