Tengo un paquete SSIS que eventualmente también me gustaría pasar parámetros, estos parámetros vendrán de una aplicación .NET (VB o C#) así que tenía curiosidad si alguien sabe de cómo hacer esto, o mejor aún un sitio web con consejos útiles sobre cómo hacerlo. Entonces, básicamente, quiero ejecutar un paquete SSIS desde .NET pasando los parámetros del paquete SSIS que puede usar dentro de él. Por ejemplo, el paquete SSIS utilizará la importación de archivos planos en un archivo SQL db; sin embargo, la ruta y el nombre del archivo podrían ser el parámetro que se pasa desde la aplicación .Net.¿Cómo ejecutar un paquete SSIS desde .NET?
Respuesta
Aquí es cómo establecer las variables en el paquete de código -
using Microsoft.SqlServer.Dts.Runtime;
private void Execute_Package()
{
string pkgLocation = @"c:\test.dtsx";
Package pkg;
Application app;
DTSExecResult pkgResults;
Variables vars;
app = new Application();
pkg = app.LoadPackage(pkgLocation, null);
vars = pkg.Variables;
vars["A_Variable"].Value = "Some value";
pkgResults = pkg.Execute(null, vars, null, null, null);
if (pkgResults == DTSExecResult.Success)
Console.WriteLine("Package ran successfully");
else
Console.WriteLine("Package failed");
}
Gracias @Craig! Sin embargo, 'Dts' ahora está en desuso a partir de SQL Server 2008, ¿cómo puedes hacer esto sin el paquete' Dts'? –
@IanCampbell Supongo que se refiere a Microsoft.SqlServer.Dts.Runtime? Dts es solo el nombre heredado de SSIS: es solo la declaración del espacio de nombres. El código anterior es compatible en el futuro. – Spikeh
@Spikeh - lo que me confunde es que Microsoft dice que Dts está en desuso y "ha sido reemplazado por SQL Server Integration Services": http://technet.microsoft.com/en-us/library/cc707786%28v=sql. 105% 29.aspx –
Para añadir a la respuesta @Craig Schwarze,
Éstos son algunos enlaces relacionados MSDN:
Loading and Running a Local Package Programmatically:
Loading and Running a Remote Package Programmatically
C apturing eventos de un paquete de reproducción:
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace RunFromClientAppWithEventsCS
{
class MyEventListener : DefaultEvents
{
public override bool OnError(DtsObject source, int errorCode, string subComponent,
string description, string helpFile, int helpContext, string idofInterfaceWithError)
{
// Add application-specific diagnostics here.
Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description);
return false;
}
}
class Program
{
static void Main(string[] args)
{
string pkgLocation;
Package pkg;
Application app;
DTSExecResult pkgResults;
MyEventListener eventListener = new MyEventListener();
pkgLocation =
@"C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services" +
@"\Package Samples\CalculatedColumns Sample\CalculatedColumns\CalculatedColumns.dtsx";
app = new Application();
pkg = app.LoadPackage(pkgLocation, eventListener);
pkgResults = pkg.Execute(null, null, eventListener, null, null);
Console.WriteLine(pkgResults.ToString());
Console.ReadKey();
}
}
}
Así es como hacer para que con el catálogo SSDB que se introdujo con SQL Server 2012 ...
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.IntegrationServices;
public List<string> ExecutePackage(string folder, string project, string package)
{
// Connection to the database server where the packages are located
SqlConnection ssisConnection = new SqlConnection(@"Data Source=.\SQL2012;Initial Catalog=master;Integrated Security=SSPI;");
// SSIS server object with connection
IntegrationServices ssisServer = new IntegrationServices(ssisConnection);
// The reference to the package which you want to execute
PackageInfo ssisPackage = ssisServer.Catalogs["SSISDB"].Folders[folder].Projects[project].Packages[package];
// Add a parameter collection for 'system' parameters (ObjectType = 50), package parameters (ObjectType = 30) and project parameters (ObjectType = 20)
Collection<PackageInfo.ExecutionValueParameterSet> executionParameter = new Collection<PackageInfo.ExecutionValueParameterSet>();
// Add execution parameter (value) to override the default asynchronized execution. If you leave this out the package is executed asynchronized
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "SYNCHRONIZED", ParameterValue = 1 });
// Add execution parameter (value) to override the default logging level (0=None, 1=Basic, 2=Performance, 3=Verbose)
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "LOGGING_LEVEL", ParameterValue = 3 });
// Add a project parameter (value) to fill a project parameter
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 20, ParameterName = "MyProjectParameter", ParameterValue = "some value" });
// Add a project package (value) to fill a package parameter
executionParameter.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 30, ParameterName = "MyPackageParameter", ParameterValue = "some value" });
// Get the identifier of the execution to get the log
long executionIdentifier = ssisPackage.Execute(false, null, executionParameter);
// Loop through the log and do something with it like adding to a list
var messages = new List<string>();
foreach (OperationMessage message in ssisServer.Catalogs["SSISDB"].Executions[executionIdentifier].Messages)
{
messages.Add(message.MessageType + ": " + message.Message);
}
return messages;
}
El código es una ligera adaptación de http://social.technet.microsoft.com/wiki/contents/articles/21978.execute-ssis-2012-package-with-parameters-via-net.aspx?CommentPosted=true#commentmessage
También hay un artículo similar en http://domwritescode.com/2014/05/15/project-deployment-model-changes/
¿Dónde se encuentra el microsoft.sqlserver.management.integrationservices.dll? Tengo SQL2014 instalado y no puedo encontrarlo haciendo una búsqueda de Windows. –
Aparentemente solo está en el GAC: [Microsoft.SqlServer.Management.IntegrationServices.dll assembly location] (http://muxtonmumbles.blogspot.com.au/2012/08/programmatically-executing-packages-in.html) –
Gracias . Lo tengo. Esa ubicación funcionó para mí. –
- 1. ¿Se puede ejecutar una tarea de SSIS desde .net?
- 2. ejecutar paquete SSIS o DTS de forma asincrónica desde ASP.NET
- 3. Ejecutando el paquete SSIS desde C#
- 4. Cómo ejecutar un script de PowerShell desde SSIS
- 5. Ejecutar el paquete SSIS de SQL Server del procedimiento almacenado
- 6. Web Referencia rompe paquete SSIS
- 7. ¿Cómo edito los archivos del paquete SSIS?
- 8. ¿Cómo fusiono los archivos del paquete SSIS?
- 9. Programar la ejecución del paquete SSIS
- 10. ¿Cómo encuentro la versión de .NET Framework utilizada en un paquete de SSIS 2008 R2?
- 11. ¿Cómo solicito la entrada de un paquete SSIS?
- 12. Problema de TFS CI con un paquete SSIS
- 13. Cómo detener SSIS desde "Llamar a casa"
- 14. ¿Cómo hacer una solicitud HTTP desde SSIS?
- 15. Ejecutar un comando de shell desde una aplicación .NET
- 16. ¿Qué es el paquete SSIS y qué hace?
- 17. Cómo recuperar o restablecer la contraseña del paquete SSIS?
- 18. Ejecutar el paquete osgi desde la línea de comandos
- 19. ejecutar el mismo paquete SSIS con diferentes parámetros en diferentes tiempo
- 20. ¿Es posible ejecutar un ensamblado .NET (dll) desde vbscript?
- 21. Fallo intermitente para alistar paquete SSIS en transacción DTC
- 22. Depurando en SSIS
- 23. SSIS DTEXEC paquete carácter de espacio variable no aceptado
- 24. SSIS: No veo el asistente de configuración del paquete
- 25. ¿Cómo se parametriza la cadena de conexión de la base de datos en un paquete SSIS?
- 26. ejecutar selectivamente la tarea en el flujo de control ssis
- 27. ¿Cómo mover un archivo de texto después de importar los datos usando el paquete SSIS?
- 28. Powershell en SSIS
- 29. ¿Cómo puedo implementar un solo paquete desde las herramientas de datos de SQL Server en SSIS 2012?
- 30. ¿Cómo funciona realmente SSIS Dataflow?
Para futuros lectores: antes de utilizar la siguiente solución, revise su licencia. Creo que esto solo funciona en máquinas con SSIS instalado, no solo en la referencia de DLL. En un entorno de producción, normalmente incluso la instalación de SSIS sin instalar el motor de DB en sí requiere una licencia. –
[Ejecutando el paquete SSIS mediante programación] (http://blogs.msdn.com/michen/archive/2007/03/22/running-ssis-package-programmatically.aspx) –
¿Alguien puede confirmar el comentario de @ JohnSpiegel? ¿Esto solo funcionará en un entorno de producción si está instalado SSIS? –