jueves, 4 de abril de 2013

OleDbConnections y Script Component


SSIS: usando conexiones OleDb dentro de un Script Component.


Trabajando en un proyecto de Sql Integration Services 2008 me encuentro con la necesidad de realizar unas grabaciones de datos dentro de un Script Component. Nuestros paquetes usan conexiones OleDb para evitar la capa de código manejado Ado y obtener mejor eficacia.
El problema llega al querer usar un Script Component dentro de una Tarea de Flujo de Datos (Data Flow Task). El método descrito aquí simplemente no funciona con OleDb. El objeto no manejado devuelto por el connection manager no se puede convertir a OleDbConnection ni a ninguna otra interfaz manejada.

public override void AcquireConnections(object Transaction)
    {
        base.AcquireConnections(Transaction);
        connectionManager = this.Connections.Connection;
        // Falla el cast de object a OleDbConnection, ya que lo que devuelve es un objeto COM no manejado
        oleDbCon = (OleDbConnection)connectionManager.AcquireConnection(Transaction);
    }

Todo parecía indicar que debería añadir una conexión Ado.Net al paquete, que significaba algo mas a parametrizar en el fichero de configuración, más documentación..
Finalmente di con la solución. El truco pasa por añadir un nuevo Ado.Net Connection Manager y en la parte  superior donde se elije el proveedor de datos, elegir el proveedor OleDb que deseemos.

Seleccionar proveedor Ado.Net para OleDb

Ahora podemos usar sin problemas la misma cadena de conexión dentro del Script Component.
Saludos.