Erstellen eines ODBC-Ziels mit der Skriptkomponente

In SQL ServerIntegration Services werden Daten in der Regel mithilfe eines ADO.NET-Ziels und des .NET Framework-Datenanbieters für ODBC in ein ODBC-Ziel gespeichert. Sie können jedoch auch ein Ad-hoc-ODBC-Ziel für die Verwendung in einem einzelnen Paket erstellen. Zur Erstellung dieses Ad-hoc-ODBC-Ziels verwenden Sie die Skriptkomponente, wie in dem folgenden Beispiel dargestellt.

HinweisHinweis

Wenn Sie eine Komponente erstellen möchten, die Sie einfacher in mehreren Datenflusstasks und Paketen wiederverwenden können, empfiehlt es sich, den Code in diesem Skriptkomponentenbeispiel als Ausgangspunkt für eine benutzerdefinierte Datenflusskomponente zu verwenden. Weitere Informationen finden Sie unter Entwickeln einer benutzerdefinierten Datenflusskomponente.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie eine Zielkomponente erstellt wird, die einen vorhandenen ODBC-Verbindungs-Manager zum Speichern von Daten aus dem Datenfluss in einer MicrosoftSQL Server-Tabelle verwendet.

Dieses Beispiel ist eine modifizierte Version des benutzerdefinierten ADO.NET-Ziels, das im Thema Erstellen eines Ziels mit der Skriptkomponente veranschaulicht wurde. In diesem Beispiel wurde das benutzerdefinierte ADO.NET-Ziel jedoch so geändert, dass es mit einem ODBC-Verbindungs-Manager funktioniert und Daten in einem ODBC-Ziel speichert. Die Modifizierungen umfassen die folgenden Änderungen:

  • Sie können die AcquireConnection-Methode des ODBC-Verbindungs-Managers nicht aus verwaltetem Code aufrufen, da dadurch ein systemeigenes Objekt zurückgegeben wird. In diesem Beispiel wird daher die Verbindungszeichenfolge des Verbindungs-Managers verwendet, um eine direkte Verbindung mit der Datenquelle mithilfe des verwalteten ODBC-.NET Framework-Datenanbieters herzustellen.

  • Von OdbcCommand werden Positionsparameter erwartet. Die Position von Parametern wird durch die Fragezeichen (?) im Text des Befehls angegeben. (Im Gegensatz dazu werden von SqlCommand benannte Parameter erwartet.)

In diesem Beispiel wird die Tabelle Person.Address in der AdventureWorks-Beispieldatenbank verwendet. In dem Beispiel werden die erste und die vierte Spalte dieser Tabelle, die Spalte intAddressID und nvarchar(30)City, durch den Datenfluss übergeben. Die gleichen Daten werden in den Beispielen für die Quelle, die Transformation und das Ziel im Thema Entwickeln bestimmter Arten von Skriptkomponenten verwendet.

So konfigurieren Sie dieses Skriptkomponentenbeispiel

  1. Erstellen Sie einen ODBC-Verbindungs-Manager, der eine Verbindung mit der AdventureWorks-Datenbank herstellt.

  2. Erstellen Sie eine Zieltabelle, indem Sie den folgenden Transact-SQL-Befehl in der AdventureWorks-Datenbank ausführen:

    CREATE TABLE [Person].[Address2](
        [AddressID] [int] NOT NULL,
        [City] [nvarchar](30) NOT NULL
    )
    
  3. Fügen Sie der Oberfläche des Datenfluss-Designers eine neue Skriptkomponente hinzu, und konfigurieren Sie sie als Ziel.

  4. Verbinden Sie die Ausgabe einer Upstreamquelle oder Transformation mit der Zielkomponente im SSIS-Designer. (Sie können eine Quelle ohne Transformationen direkt mit einem Ziel verbinden.) Um sicherzustellen, dass dieses Beispiel funktioniert, muss die Ausgabe der Upstreamkomponente zumindest die Spalten AddressID und City aus der Person.Address-Tabelle der AdventureWorks-Beispieldatenbank enthalten.

  5. Öffnen Sie den Transformations-Editor für Skripterstellung. Wählen Sie auf der Seite Eingabespalten die Spalten AddressID und City aus.

  6. Geben Sie der Eingabe auf der Seite Eingaben und Ausgaben einen aussagekräftigeren Namen, z. B. MeineAdresseingabe.

  7. Fügen Sie auf der Seite Verbindungs-Manager den ODBC-Verbindungs-Manager hinzu, oder erstellen Sie diesen, und geben Sie ihm einen aussagekräftigen Namen, z. B. MeinODBCVerbindungsManager.

  8. Klicken Sie auf der Seite Skript auf Skript bearbeiten, und geben Sie das folgende Skript in die ScriptMain-Klasse ein.

  9. Schließen Sie anschließend die Skriptentwicklungsumgebung und den Transformations-Editor für Skripterstellung, und führen Sie das Beispiel aus.

    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 (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf der Integration Services-Seite von MSDN oder TechNet:

Abonnieren Sie die auf der Seite verfügbaren RSS-Newsfeeds, um automatische Benachrichtigungen zu diesen Aktualisierungen zu erhalten.