Erstellen eines ODBC-Ziels mit der Skriptkomponente
Gilt für: SQL Server SSIS Integration Runtime in Azure Data Factory
In SQL Server Integration Services werden Daten in der Regel mithilfe eines ADO.NET-Ziels und des .NET Framework-Datenanbieters für ODBC in einem 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.
Hinweis
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 Microsoft SQL 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 so ein natives 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.
OdbcCommand erwartet Positionsparameter. Die Position von Parametern wird durch die Fragezeichen (?) im Text des Befehls angegeben. (Im Gegensatz dazu erwartet SqlCommand benannte Parameter.)
In diesem Beispiel wird die Tabelle Person.Address in der AdventureWorks-Beispieldatenbank verwendet. Im Beispiel werden die erste und die vierte Spalte dieser Tabelle, nämlich die Spalten int AddressID 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 Developing Specific Types of Script Components (Entwickeln bestimmter Typen von Skriptkomponenten) verwendet.
So konfigurieren Sie dieses Skriptkomponentenbeispiel
Erstellen Sie einen ODBC-Verbindungs-Manager, der eine Verbindung mit der AdventureWorks-Datenbank herstellt.
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)
Fügen Sie der Oberfläche des Datenfluss-Designers eine neue Skriptkomponente hinzu, und konfigurieren Sie sie als Ziel.
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.
Öffnen Sie den Transformations-Editor für Skripterstellung. Wählen Sie auf der Seite Eingabespalten die Spalten AddressID und City aus.
Geben Sie der Eingabe auf der Seite Eingaben und Ausgaben einen aussagekräftigeren Namen, z.B. MyAddressInput.
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. MyODBCConnectionManager.
Klicken Sie auf der Seite Skript auf Skript bearbeiten, und geben Sie das folgende Skript in die ScriptMain-Klasse ein.
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(); } }
Weitere Informationen
Creating a Destination with the Script Component (Erstellen eines Ziels mit der Skriptkomponente)