Crear un destino ODBC con el componente de script

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 los parámetros posicionales. Los signos de interrogación (?) indican las posiciones de los parámetros en el texto del comando. (En cambio, SqlCommand espera parámetros con nombre.)

En este ejemplo se usa la tabla Person.Address en la base de datos de ejemplo AdventureWorks2008R2. 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 conecte a la base de datos AdventureWorks2008R2.

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

    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 de nivel superior debe incluir por lo menos las columnas AddressID y City de la tabla Person.Address de la base de datos de ejemplo AdventureWorks2008R2.

  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 conexión, 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 abajo 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();
    
        }
    }
    
Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las descargas, los artículos, los ejemplos y los vídeos más recientes de Microsoft, así como las soluciones seleccionadas desde la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.