variable script net from ejecutar dtsx desde c# ssis

net - script task ssis variables c#



Ejecutando el paquete de SSIS 2012 que tiene componentes de script desde una aplicaciĆ³n externa (1)

No tiene instalado el servicio de SQL Server Integration Services en la máquina desde la que se ejecuta la aplicación.

Ver también https://dba.stackexchange.com/questions/49786/error-to-run-a-ssis-package-outside-of-sql-server-data-tools-you-must-install

Estoy escribiendo una aplicación que ejecutará un paquete de SSIS 2012 utilizando el ensamblado Microsoft.SqlServer.ManagedDTS v 11.0. El paquete que estoy tratando de ejecutar fue diseñado y ejecutado con éxito desde SSDT-2012, y tiene componentes de script que manejan las filas que no se transfieren correctamente.

Cuando intento ejecutar mi aplicación, aparece el mensaje de error para cada uno de los componentes de mi script:

SSIS.Pipeline: para ejecutar un paquete SSIS fuera de las herramientas de datos de SQL Server, debe instalar [Nombre de componente de script] de Integration Services o superior.

Configuración: creación de aplicaciones para x86 en Windows con el siguiente archivo app.config:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> <supportedRuntime version="v2.0.50727"/> </startup> </configuration>

El único código relevante es:

using System; using System.Data; using System.Data.Common; using System.IO; using Microsoft.SqlServer.Dts.Runtime; class MyApp { public void ExecutePackage() { //Assume I have all the variables I need like packageFile, packageName, //srcConnectionString, destConnectionString and eventListener etc. Package pkg; Application app; DTSExecResults pkgResults; app = new Application(); pkg = app.LoadPackage(packageFile, eventListener); pkg.Variables["SrcConnectionString"].Value = srcConnectionString; pkg.Variables["DestConnectionString"].Value = destConnectionString; if (null != srcAssembly || null != destAssembly) { foreach (ConnectionManager connection in pkg.Connections) { if (null != srcAssembly && connection.Name.Contains("Source")) { connection.SetQualifier(srcAssembly); } else if (null != destAssembly && connection.Name.Contains("Destination")) { connection.SetQualifier(destAssembly); } } } pkgResults = pkg.Execute(null, null, eventListener, null, null); } }

¿Algunas ideas?