2012-08-08 42 views
6

Tengo el siguiente código escrito en una tarea de SSIS Script para conectar a mi base de datos SQL:SSIS Error de conexión

ConnectionManager cm; 
System.Data.SqlClient.SqlConnection sqlConn; 
System.Data.SqlClient.SqlCommand sqlComm; 

cm = Dts.Connections["QUAHILSQ03"]; 

sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction); 

Sin embargo esta línea:

sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction); 

Devuelve la siguiente excepción:

{"No se puede convertir el objeto COM de tipo 'Sistema .__ ComObject' al tipo de clase 'System.Data.SqlClient.SqlConnection'. Las instancias de tipos que representan componentes COM no se pueden convertir a tipos que no lo hacen representar componentes COM; sin embargo, se pueden convertir en interfaces siempre que el componente COM subyacente sea compatible con las llamadas a QueryInterface para el IID de la interfaz. "} System.Exception {System.InvalidCastException}

Respuesta

12

solución Bastante simple: yo había creado el gestor de conexiones QUAHILSQ03 como una conexión OLE DB. Simplemente lo cambié a ADO.NET y mi código funcionó bien.

6

Me parece que está utilizando una conexión OLEDB. método de conexión en el administrador de conexión OLE DB devuelve un objeto COM de modo que está recibiendo el error

Prueba esto:.

ConnectionManager cm = Dts.Connections["QUAHILSQ03"]; 
    IDTSConnectionManagerDatabaseParameters100 cmParams = cm.InnerObject 
    as IDTSConnectionManagerDatabaseParameters100; 
    OleDbConnection conn = cmParams.GetConnectionForSchema() as OleDbConnection; 

Es necesario utilizar Microsoft.SqlServer.Dts.Runtime.Wrapper espacio de nombres con el enfoque anterior no se puede retener el transaction

.

Para más información lea el artículo this

+1

Y si elige ir a la ruta [ado.net] (http://toddmcdermid.blogspot.com/2011/05/use-connections-properly-in-ssis-script.html), la publicación de Todd McDermid debería para ayudarte – billinkc