次の方法で共有


PreExecute メソッド

PrepareForExecute の後で、かつ PrimeOutput および ProcessInput の前に呼び出されます。

名前空間:  Microsoft.SqlServer.Dts.Pipeline
アセンブリ:  Microsoft.SqlServer.PipelineHost (Microsoft.SqlServer.PipelineHost.dll)

構文

'宣言
Public Overridable Sub PreExecute
'使用
Dim instance As PipelineComponent

instance.PreExecute()
public virtual void PreExecute()
public:
virtual void PreExecute()
abstract PreExecute : unit -> unit 
override PreExecute : unit -> unit 
public function PreExecute()

説明

コンポーネントの開発者は、可能な限り多くの機能を PreExecute に組み込んでおく必要があります。その理由は、ProcessInput の各バッファごとに 1 回ではなく、コンポーネントごとに 1 回呼び出されるからです。コンポーネントは、BufferManagerFindColumnByLineageID メソッドを呼び出すことにより、PipelineBuffer での入力列と出力列のインデックスを検索する必要があります。

使用例

次の例では、InputColumnCollection 内の列の列インデックスを検索する方法を示しています。これらはローカル変数に格納され、PipelineBuffer 内の列にアクセスするために、ProcessInput で使用されます。

int[] bufferColumnIndex;
public override void PreExecute()
{
    IDTSInput100 input = ComponentMetaData.InputCollection[0];
    bufferColumnIndex = new int[input.InputColumnCollection.Count];
    for ( int x=0; x < input.InputColumnCollection.Count; x++)
    {
        bufferColumnIndex[x] = BufferManager.FindColumnByLineageID( input.Buffer, input.InputColumnCollection[x].LineageID);
    }
}
public override void ProcessInput( int inputID, PipelineBuffer buffer )
{
    while( buffer.NextRow() )
    {
        for( int x=0; x < bufferColumnIndex.Length(); x++ )
        {
            if( !buffer.IsNull(bufferColumnIndex[x]))
            {
                // TODO: Access the column data.
            }
        }
    }
}
Private bufferColumnIndex As Integer() 

Public Overrides Sub PreExecute() 
 Dim input As IDTSInput100 = ComponentMetaData.InputCollection(0) 
 bufferColumnIndex = New Integer(input.InputColumnCollection.Count - 1) {} 
 Dim x As Integer = 0 
 While x < input.InputColumnCollection.Count
   bufferColumnIndex(x) = BufferManager.FindColumnByLineageID(input.Buffer, input.InputColumnCollection(x).LineageID) 
   x -= 1
 End While 
End Sub 

Public Overrides Sub ProcessInput(ByVal inputID As Integer, ByVal buffer As PipelineBuffer) 
 While buffer.NextRow 
   Dim x As Integer = 0 
   While x < bufferColumnIndex.Length 
     If Not buffer.IsNull(bufferColumnIndex(x)) Then 
     End If 
     x -= 1
   End While 
 End While 
End Sub