Conexión ODBC por código

Para nuestro ejemplo vamos a utilizar una tabla Cliente en el sistema origen con la siguiente estructura:

Nombre de columna Tipo de datos
IdCliente Integer
NombreCliente Varchar(100)
Salario Double
Edad Smallint
FechaModificacion DateTime

 

Una vez creada la conexión ODBC dentro del paquete, tal y como expliqué en el primer capítulo de esta serie, necesitamos añadir un objeto script dentro del flujo de datos. Automáticamente nos aparecerá una ventana donde determinamos que tipo de objeto vamos a crear: Fuente de datos, Destino o Transformación. En nuestro caso elegiremos Fuente de datos.

Cuando el objeto script está en el área de diseño del flujo de datos basta con que hagamos doble click sobre él para acceder al editor de propiedades y poder añadir cada uno de los elementos que necesitamos definir en nuestro objeto fuente.

Inicialmente vamos a generar los metadatos que representan el conjunto de datos a extraer de la fuente ODBC. Dentro de la sección Input and Ouput añadiremos las columnas necesarias dentro de la salida que viene predefinida. Para cada columna le daremos un nombre y especificaremos el tipo de datos que contiene. El tipo de datos ha de ser equivalente al tipo de datos en la tabla origen.

El siguiente paso será definir un gestor de conexiones que apuntará a nuestra conexión ODBC. Dicho gestor de conexión será utilizado internamente a través del código para poder abrir y manejar la fuente de datos.

En este punto ya solo tenemos que incluir el código que va a manejar la conexión ODBC para realizar la consulta y devolver la información a través del flujo de salida especificado. A continuación podemos ver un ejemplo de código a incluir dentro de este componente. Dentro de este script es importante que incluyamos la directiva system.data.odbc. Esta directiva nos dará acceso a la librería de manejo de conexiones ODBC.

     ‘ Microsoft SQL Server Integration Services user script component ‘ This is your new script component in Microsoft Visual Basic .NET

‘ ScriptMain is the entrypoint class for script components

 

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

 

 

‘Incluimos la directiva que nos permite utilizar los componentes necesarios para la conexión ODBC

Imports System.Data.Odbc

 

Public Class ScriptMain

Inherits UserComponent

 

‘ Se define el gestor de conexiones y el lector de datos que se va a utilizar internamente

Dim connMgr As IDTSConnectionManager90

Dim odbcConn As OdbcConnection

Dim odbcReader As OdbcDataReader

 

‘ Se sobreescribe el evento PreExecute para abrir la conexión y ejecutar el comando SQL correspondiente

Public Overrides Sub PreExecute()

 

Dim cmd As OdbcCommand

 

connMgr = Me.Connections.FuenteODBC

odbcConn = CType(connMgr.AcquireConnection(Nothing), OdbcConnection)

 

cmd = New OdbcCommand(Me.Variables.MiComandoSQL.ToString, odbcConn)

cmd.CommandTimeout = 0

odbcReader = cmd.ExecuteReader

 

End Sub

 

‘ Se sobreescribe el evento CreateNewOutputRows para recoger el resultado del comando SQL dentro del buffer

‘ de salida especificado manualmente a través de las propiedades

Public Overrides Sub CreateNewOutputRows()

Do While odbcReader.Read

With Output0Buffer

.AddRow()

.IdCliente = odbcReader.GetInt32(0)

.NombreCliente = odbcReader.GetString(1)

.Salario = odbcReader.GetDecimal(2)

 

‘ Podemos leer solo aquellas columnas que nos interesen para nuestro flujo de datos, en este caso

‘ no hemos leído la columna 3 del conjunto de datos devueltos por la fuente

.FechaModificado = odbcReader.GetDateTime(4)

End With

Loop

End Sub

 

End Class