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
Cree un administrador de conexiones ODBC que conecte a la base de datos AdventureWorks2008R2.
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 )
Agregue un nuevo componente de script a la superficie del diseñador de flujo de datos y configúrelo como destino.
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.
Abra el Editor de transformación Script. En la página Columnas de entrada, seleccione las columnas AddressID y City.
En la página Entradas y salidas, cambie el nombre de la entrada por un nombre más descriptivo como MyAddressInput.
En la página Administradores de conexión, agregue o cree el administrador de conexiones ODBC con un nombre descriptivo como MyODBCConnectionManager.
En la página Script, haga clic en Editar script y, a continuación, escriba el script mostrado abajo en la clase ScriptMain.
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(); } }
|