プログラムによる入力列の選択

プログラムによってコンポーネントを接続したら、変換する列または下流コンポーネントに渡す列を上流コンポーネントから選択します。コンポーネント用の入力列を選択しないと、コンポーネントはデータ フロー タスクから行を受信しません。

列の選択

GetVirtualInput メソッドを呼び出し、使用できる列の一覧を上流コンポーネントから取得します。次に、デザイン時のコンポーネント インスタンスの SetUsageType メソッドを呼び出し、仮想入力列のコレクションから列を選択します。このメソッドを呼び出すと、コンポーネントは、上流コンポーネントの出力コレクション内の対応する列と同じ系列 ID を持つ入力列を、コンポーネントの入力列のコレクション内に新しく作成します。

仮想入力オブジェクトの SetUsageType メソッドを直接呼び出して列を選択しないでください。これによって、不適切なデータ型またはその他のプロパティに基づいて、コンポーネントが列を拒否する機能がバイパスされるためです。

サンプル

次のコード例では、デザイン時のコンポーネントのインスタンスを使用して、コンポーネント用の列を選択する方法を示します。

using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;

namespace Microsoft.SqlServer.Dts.Samples
{
  class Program
  {
    static void Main(string[] args)
    {
      // Create a package and add a Data Flow task.
      Package package = new Package();
      Executable e = package.Executables.Add("STOCK:PipelineTask");
      TaskHost thMainPipe = e as TaskHost;
      MainPipe dataFlowTask = thMainPipe.InnerObject as MainPipe;

      // Add an OLE DB connection manager to the package.
      ConnectionManager conMgr = package.Connections.Add("OLEDB");
      conMgr.ConnectionString = "Provider=SQLOLEDB.1;" +
        "Data Source=<servername>;Initial Catalog=AdventureWorks2008R2;" +
        "Integrated Security=SSPI;";
      conMgr.Name = "SSIS Connection Manager for OLE DB";
      conMgr.Description = "OLE DB connection to the AdventureWorks2008R2 database.";

      // Create and configure an OLE DB source component.  
      IDTSComponentMetaData100 source =
        dataFlowTask.ComponentMetaDataCollection.New();
      source.ComponentClassID = "DTSAdapter.OleDbSource";
      // Create the design-time instance of the source.
      CManagedComponentWrapper srcDesignTime = source.Instantiate();
      // The ProvideComponentProperties method creates a default output.
      srcDesignTime.ProvideComponentProperties();
      // Assign the connection manager.
      source.RuntimeConnectionCollection[0].ConnectionManager =
        DtsConvert.GetExtendedInterface(conMgr);
      // Set the custom properties of the source.
      srcDesignTime.SetComponentProperty("AccessMode", 2);
      srcDesignTime.SetComponentProperty("SqlCommand",
        "Select * from Production.Product");

      // Connect to the data source,
      //  and then update the metadata for the source.
      srcDesignTime.AcquireConnections(null);
      srcDesignTime.ReinitializeMetaData();
      srcDesignTime.ReleaseConnections();

      // Create and configure an OLE DB destination.
      IDTSComponentMetaData100 destination =
        dataFlowTask.ComponentMetaDataCollection.New();
      destination.ComponentClassID = "DTSAdapter.OleDbDestination";
      // Create the design-time instance of the destination.
      CManagedComponentWrapper destDesignTime = destination.Instantiate();
      // The ProvideComponentProperties method creates a default input.
      destDesignTime.ProvideComponentProperties();

      // Create the path from source to destination.
      IDTSPath100 path = dataFlowTask.PathCollection.New();
      path.AttachPathAndPropagateNotifications(source.OutputCollection[0],
        destination.InputCollection[0]);

      // Get the destination's default input and virtual input.
      IDTSInput100 input = destination.InputCollection[0];
      IDTSVirtualInput100 vInput = input.GetVirtualInput();

      // Iterate through the virtual input column collection.
      foreach (IDTSVirtualInputColumn100 vColumn in vInput.VirtualInputColumnCollection)
      {
        // Call the SetUsageType method of the destination
        //  to add each available virtual input column as an input column.
        destDesignTime.SetUsageType(
           input.ID, vInput, vColumn.LineageID, DTSUsageType.UT_READONLY);
      }

      // Verify that the columns have been added to the input.
      foreach (IDTSInputColumn100 inputColumn in destination.InputCollection[0].InputColumnCollection)
        Console.WriteLine(inputColumn.Name);
      Console.Read();

      // Add other components to the data flow and connect them.
    }
  }
}
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Module Module1

  Sub Main()

    ' Create a package and add a Data Flow task.
    Dim package As Microsoft.SqlServer.Dts.Runtime.Package = _
      New Microsoft.SqlServer.Dts.Runtime.Package()
    Dim e As Executable = package.Executables.Add("STOCK:PipelineTask")
    Dim thMainPipe As Microsoft.SqlServer.Dts.Runtime.TaskHost = _
      CType(e, Microsoft.SqlServer.Dts.Runtime.TaskHost)
    Dim dataFlowTask As MainPipe = CType(thMainPipe.InnerObject, MainPipe)

    ' Add an OLE DB connection manager to the package.
    Dim conMgr As ConnectionManager = package.Connections.Add("OLEDB")
    conMgr.ConnectionString = "Provider=SQLOLEDB.1;" & _
      "Data Source=<servername>;Initial Catalog=AdventureWorks2008R2;" & _
      "Integrated Security=SSPI;"
    conMgr.Name = "SSIS Connection Manager for OLE DB"
    conMgr.Description = "OLE DB connection to the AdventureWorks2008R2 database."

    ' Create and configure an OLE DB source component.  
    Dim source As IDTSComponentMetaData100 = _
      dataFlowTask.ComponentMetaDataCollection.New
    source.ComponentClassID = "DTSAdapter.OleDbSource"
    ' Create the design-time instance of the source.
    Dim srcDesignTime As CManagedComponentWrapper = source.Instantiate
    ' The ProvideComponentProperties method creates a default output.
    srcDesignTime.ProvideComponentProperties()
    ' Assign the connection manager.
    source.RuntimeConnectionCollection(0).ConnectionManager = _
      DtsConvert.GetExtendedInterface(conMgr)
    ' Set the custom properties of the source.
    srcDesignTime.SetComponentProperty("AccessMode", 2)
    srcDesignTime.SetComponentProperty("SqlCommand", _
      "Select * from Production.Product")

    ' Connect to the data source,
    '  and then update the metadata for the source.
    srcDesignTime.AcquireConnections(Nothing)
    srcDesignTime.ReinitializeMetaData()
    srcDesignTime.ReleaseConnections()

    ' Create and configure an OLE DB destination.
    Dim destination As IDTSComponentMetaData100 = _
      dataFlowTask.ComponentMetaDataCollection.New
    destination.ComponentClassID = "DTSAdapter.OleDbDestination"
    ' Create the design-time instance of the destination.
    Dim destDesignTime As CManagedComponentWrapper = destination.Instantiate
    ' The ProvideComponentProperties method creates a default input.
    destDesignTime.ProvideComponentProperties()

    ' Create the path from source to destination.
    Dim path As IDTSPath100 = dataFlowTask.PathCollection.New
    path.AttachPathAndPropagateNotifications(source.OutputCollection(0), _
      destination.InputCollection(0))

    ' Get the destination's default input and virtual input.
    Dim input As IDTSInput100 = destination.InputCollection(0)
    Dim vInput As IDTSVirtualInput100 = input.GetVirtualInput

    ' Iterate through the virtual input column collection.
    For Each vColumn As IDTSVirtualInputColumn100 In vInput.VirtualInputColumnCollection
      ' Call the SetUsageType method of the destination
      '  to add each available virtual input column as an input column.
      destDesignTime.SetUsageType(input.ID, vInput, vColumn.LineageID, DTSUsageType.UT_READONLY)
    Next

    ' Verify that the columns have been added to the input.
    For Each inputColumn As IDTSInputColumn100 In destination.InputCollection(0).InputColumnCollection
      Console.WriteLine(inputColumn.Name)
    Next
    Console.Read()

    ' Add other components to the data flow and connect them.

  End Sub

End Module
Integration Services のアイコン (小) 最新の Integration Services の入手

Microsoft が提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを定期受信します。