Création d'une destination ODBC à l'aide du composant Script
Dans SQL Server Integration Services, vous enregistrez en général les données dans une destination ODBC en utilisant une destination ADO.NET et le fournisseur de données .NET Framework pour ODBC. Toutefois, vous pouvez également créer une destination ODBC ad hoc à utiliser dans un package unique. Pour créer cette destination ODBC ad hoc, vous utilisez le composant Script comme indiqué dans l'exemple suivant.
Notes
Si vous souhaitez créer un composant que vous pouvez réutiliser plus facilement dans plusieurs tâches de flux de données et plusieurs packages, utilisez le code présenté dans cet exemple de composant Script comme point de départ pour un composant de flux de données personnalisé. Pour plus d'informations, consultez Développement d'un composant de flux de données personnalisé.
Exemple
L'exemple suivant montre comment créer un composant de destination qui utilise un gestionnaire de connexions ODBC existant pour enregistrer des données du flux de données dans une table Microsoft SQL Server.
Cet exemple est une version modifiée de la destination ADO.NET personnalisée présentée dans la rubrique Création d'une destination à l'aide du composant Script. Toutefois, dans cet exemple, la destination ADO.NET personnalisée a été modifiée afin d'utiliser un gestionnaire de connexions ODBC et d'enregistrer les données dans une destination ODBC. Ces modifications incluent également les points suivants :
Vous ne pouvez pas appeler la méthode AcquireConnection du gestionnaire de connexions ODBC à partir du code managé, parce qu'elle renvoie un objet natif. Par conséquent, cet exemple utilise la chaîne de connexion du gestionnaire de connexions pour se connecter directement à la source de données en utilisant le fournisseur de données .NET Framework pour ODBC managé.
OdbcCommand attend des paramètres positionnels. Les positions des paramètres sont indiquées par les points d'interrogation (?) dans le texte de la commande. (Par opposition, SqlCommand attend des paramètres nommés.)
Cet exemple utilise la table Person.Address de l'exemple de base de données AdventureWorks2008R2. L'exemple passe la première et la quatrième colonnes, à savoir int AddressID et nvarchar(30) City, de cette table via le flux de données. Ces mêmes données sont utilisées dans les exemples de sources, transformations et destinations de la rubrique Développement de types spécifiques de composants Script.
Pour configurer cet exemple de composant Script
Créez un gestionnaire de connexions ODBC qui se connecte à la base de données AdventureWorks2008R2.
Créez une table de destination en exécutant la commande Transact-SQL suivante dans la base de données AdventureWorks2008R2 :
CREATE TABLE [Person].[Address2]( [AddressID] [int] NOT NULL, [City] [nvarchar](30) NOT NULL )
Ajoutez un nouveau composant Script à l'aire du concepteur de flux de données et configurez-le en tant que destination.
Connectez la sortie d'une source ou transformation en amont au composant de destination dans le concepteur SSIS. (Vous pouvez connecter directement une source à une destination sans transformation.) Pour garantir le bon fonctionnement de cet exemple, la sortie du composant en amont doit inclure au moins les colonnes AddressID et City de la table Person.Address de l'exemple de base de données AdventureWorks2008R2.
Ouvrez l'Éditeur de transformation de script. Dans la page Colonnes d'entrée, sélectionnez les colonnes AddressID et City.
Dans la page Entrées et sorties, renommez l'entrée avec un nom plus descriptif, tel que MyAddressInput.
Dans la page Gestionnaires de connexions, ajoutez ou créez le gestionnaire de connexions ODBC à l'aide d'un nom descriptif tel que MyODBCConnectionManager.
Dans la page Script, cliquez sur Modifier le script, puis entrez le script ci-dessous dans la classe ScriptMain.
Fermez l'environnement de développement de script, fermez l'Éditeur de transformation de script, puis exécutez l'exemple.
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(); } }
|