Compartir a través de


Crear un destino ODBC con el componente de script

Se aplica a: SQL Server SSIS Integration Runtime en Azure Data Factory

En SQL Server Integration Services, normalmente se guardan los datos en un destino ODBC mediante un destino ADO.NET y el proveedor de datos de .NET Framework para ODBC. Sin embargo, también se puede crear un destino ODBC ad hoc para utilizar en un paquete único. Para crear este destino ODBC ad hoc, use el componente de script como se muestra en el ejemplo siguiente.

Nota:

Si desea crear un componente que pueda reutilizar más fácilmente en varias tareas de flujo de datos y varios paquetes, puede utilizar el código de este ejemplo de componente de script como punto de inicio para el componente de flujo de datos personalizado. Para obtener más información, vea Desarrollar un componente de flujo de datos personalizado.

Ejemplo

En el ejemplo siguiente se muestra cómo crear un componente de destino que usa un administrador de conexiones ODBC existente para guardar los datos del flujo de datos en una tabla de Microsoft SQL Server.

Este ejemplo es una versión modificada del destino ADO.NET personalizado que se mostró en el tema Crear un destino con el componente de script. Sin embargo, en este ejemplo, el destino ADO.NET personalizado se ha modificado para que funcione con un administrador de conexiones ODBC y guarde los datos a un destino de ODBC. Estas modificaciones también incluyen los cambios siguientes:

  • No puede llamar al método AcquireConnection del administrador de conexiones ODBC desde el código administrado, porque devuelve un objeto nativo. Por consiguiente, este ejemplo usa la cadena de conexión del administrador de conexiones para conectar directamente al origen de datos mediante el proveedor de datos de .NET Framework para ODBC administrado.

  • OdbcCommand espera parámetros posicionales. Los signos de interrogación (?) en el texto del comando indican las posiciones de los parámetros. (En cambio, SqlCommand espera parámetros con nombre).

En este ejemplo se usa la tabla Person.Address en la base de datos de ejemplo AdventureWorks. En el ejemplo se pasan las columnas primera y cuarta, las columnas int AddressID y nvarchar(30) City, de esta tabla a través del flujo de datos. Estos mismos datos se usan en los ejemplos de origen, transformación y destino en el tema Desarrollar tipos específicos de los componentes de script.

Para configurar este ejemplo de componente de script

  1. Cree un administrador de conexiones ODBC que se conecte a la base de datos AdventureWorks.

  2. Cree una tabla de destino ejecutando el siguiente comando Transact-SQL en la base de datos AdventureWorks:

    CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL,  
        [City] [nvarchar](30) NOT NULL)  
    
  3. Agregue un nuevo componente de script a la superficie del diseñador de flujo de datos y configúrelo como destino.

  4. Conecte la salida de un origen o transformación de nivel superior al componente de destino en el Diseñador SSIS. (Puede conectar directamente un origen a un destino sin ninguna transformación). Para asegurarse de que este ejemplo funciona, la salida del componente ascendente debe incluir por lo menos las columnas AddressID y City de la tabla Person.Address de la base de datos de ejemplo AdventureWorks.

  5. Abra el Editor de transformación Script. En la página Columnas de entrada, seleccione las columnas AddressID y City.

  6. En la página Entradas y salidas, cambie el nombre de la entrada por un nombre más descriptivo, como MyAddressInput.

  7. En la página Administradores de conexiones, agregue o cree el administrador de conexiones ODBC con un nombre descriptivo, como MyODBCConnectionManager.

  8. En la página Script, haga clic en Editar script y, a continuación, escriba el script mostrado a continuación en la clase ScriptMain.

  9. Cierre el entorno de desarrollo de script y el Editor de transformación Script y, a continuación, ejecute el ejemplo.

    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();  
    
        }  
    }  
    

Vea también

Creating a Destination with the Script Component (Crear un destino con el componente de script)