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
|