スクリプト コンポーネントによる ODBC 変換先の作成

SQL Server Integration Services では、通常、ADO.NET 変換先および .NET Framework Data Provider for ODBC を使用して、ODBC 変換先にデータを保存します。ただし、単一のパッケージで使用するアドホックな ODBC 変換先を作成することもできます。このアドホックな ODBC 変換先を作成するには、次の例に示すように、スクリプト コンポーネントを使用します。

注意

複数のデータ フロー タスクおよび複数のパッケージでより簡単に再利用できるコンポーネントを作成する場合は、このスクリプト コンポーネント サンプルのコードを基にした、カスタム データ フロー コンポーネントの作成を検討してください。詳細については、「カスタム データ フロー コンポーネントの開発」を参照してください。

使用例

この例では、既存の ODBC 接続マネージャーを使用して、データ フローのデータを Microsoft SQL Server テーブルに保存する変換先コンポーネントの作成方法を示します。

この例は、「スクリプト コンポーネントによる変換先の作成」で示したカスタムの ADO.NET 変換先を変更したものです。ただし、この例のカスタムの ADO.NET 変換先は、ODBC 接続マネージャーを使用してデータを ODBC 変換先に保存するように変更されています。こうした変更には、次の変更も含まれています。

  • マネージ コードから ODBC 接続マネージャーの AcquireConnection メソッドを呼び出すことはできません。このメソッドを呼び出すと、ネイティブ オブジェクトが返されます。そのため、この例では、接続マネージャーの接続文字列を使用して、マネージ ODBC .NET Framework データ プロバイダーで直接データ ソースに接続しています。

  • OdbcCommand には、位置パラメーターが必要です。パラメーターの位置は、コマンドのテキストの疑問符 (?) で示されます (一方、SqlCommand では名前付きパラメーターが必要です)。

この例では、AdventureWorks2008R2 サンプル データベースの Person.Address テーブルを使用します。この例では、このテーブルの第 1 列と第 4 列、つまり int 型の AddressID と nvarchar(30) 型の City をデータ フローに渡します。「特定の種類のスクリプト コンポーネントの開発」の変換元、変換、および変換先の例でも、同じデータが使用されます。

このスクリプト コンポーネントの例を構成するには

  1. AdventureWorks2008R2 データベースに接続する ODBC 接続マネージャーを作成します。

  2. AdventureWorks2008R2 データベースで次の Transact-SQL コマンドを実行して、変換先テーブルを作成できます。

    CREATE TABLE [Person].[Address2](
        [AddressID] [int] NOT NULL,
        [City] [nvarchar](30) NOT NULL
    )
    
  3. 新しいスクリプト コンポーネントを [データ フロー] デザイナー画面に追加し、変換先として構成します。

  4. SSIS デザイナーで、上流変換元の出力または変換の出力を変換先コンポーネントに接続します (変換を介さずに変換元を直接変換先に接続することもできます)。このサンプルを機能させるには、上流コンポーネントの出力に、AdventureWorks2008R2 サンプル データベースの Person.Address テーブルにある AddressID 列と City 列を最低限含める必要があります。

  5. [スクリプト変換エディター] を開きます。[入力列] ページで、AddressID 列と City 列を選択します。

  6. [入力および出力] ページで、入力を MyAddressInput などのわかりやすい名前に変更します。

  7. [接続マネージャー] ページで、ODBC 接続マネージャーを追加または作成し、MyODBCConnectionManager などのわかりやすい名前を付けます。

  8. [スクリプト] ページで、[スクリプトの編集] をクリックし、以下に示すスクリプトを ScriptMain クラスに入力します。

  9. スクリプト開発環境と [スクリプト変換エディター] を閉じ、サンプルを実行します。

    Imports System.Data.Odbc
    ...
    Public Class ScriptMain
        Inherits UserComponent
    
        Dim odbcConn As OdbcConnection
        Dim odbcCmd As OdbcCommand
        Dim odbcParam As OdbcParameter
    
        Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
    
            Dim connectionString As String
            connectionString = Me.Connections.MyODBCConnectionManager.ConnectionString
            odbcConn = New OdbcConnection(connectionString)
            odbcConn.Open()
    
        End Sub
    
        Public Overrides Sub PreExecute()
    
            odbcCmd = New OdbcCommand("INSERT INTO Person.Address2(AddressID, City) " & _
                "VALUES(?, ?)", odbcConn)
            odbcParam = New OdbcParameter("@addressid", OdbcType.Int)
            odbcCmd.Parameters.Add(odbcParam)
            odbcParam = New OdbcParameter("@city", OdbcType.NVarChar, 30)
            odbcCmd.Parameters.Add(odbcParam)
    
        End Sub
    
        Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
    
            With odbcCmd
                .Parameters("@addressid").Value = Row.AddressID
                .Parameters("@city").Value = Row.City
                .ExecuteNonQuery()
            End With
    
        End Sub
    
        Public Overrides Sub ReleaseConnections()
    
            odbcConn.Close()
    
        End Sub
    
    End Class
    
    using System.Data.Odbc;
    ...
    public class ScriptMain :
        UserComponent
    {
        OdbcConnection odbcConn;
        OdbcCommand odbcCmd;
        OdbcParameter odbcParam;
    
        public override void AcquireConnections(object Transaction)
        {
    
            string connectionString;
            connectionString = this.Connections.MyODBCConnectionManager.ConnectionString;
            odbcConn = new OdbcConnection(connectionString);
            odbcConn.Open();
    
        }
    
        public override void PreExecute()
        {
    
            odbcCmd = new OdbcCommand("INSERT INTO Person.Address2(AddressID, City) " +
                "VALUES(?, ?)", odbcConn);
            odbcParam = new OdbcParameter("@addressid", OdbcType.Int);
            odbcCmd.Parameters.Add(odbcParam);
            odbcParam = new OdbcParameter("@city", OdbcType.NVarChar, 30);
            odbcCmd.Parameters.Add(odbcParam);
    
        }
    
        public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
        {
    
            {
                odbcCmd.Parameters["@addressid"].Value = Row.AddressID;
                odbcCmd.Parameters["@city"].Value = Row.City;
                odbcCmd.ExecuteNonQuery();
            }
    
        }
    
        public override void ReleaseConnections()
        {
    
            odbcConn.Close();
    
        }
    }
    
Integration Services のアイコン (小) 最新の Integration Services の入手

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

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