Algunas veces necesitaremos ejecutar un package realizado en SSIS desde nuestras aplicaciones .NET. Para realizar dicha tarea tenemos que hacer referencia “Microsoft.Sqlserver.ManagedDts”, El código siguiente ejecuta un package:
Microsoft.SqlServer.Dts.Runtime.DTSExecResult pkgResults;
Application app = new Application();
Package package = app.LoadPackage(“Ruta del Package”, null);
pkgResults=package.Execute();
Dado que el package que necesitaba ejecutar desde mi aplicación web demoraba mucho lo deje dentro de una cola de ejecución con el metodo “System.Threading.ThreadPool.QueueUserWorkItem” un código de ejemplo seria:
protected void Button1_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Ejecutar));
}
public static void Ejecutar(object e)
{
Microsoft.SqlServer.Dts.Runtime.DTSExecResult pkgResults;
Application app = new Application();
Package package = app.LoadPackage(“Ruta del Package”, null);
pkgResults = package.Execute();
}
Al colocar el método en una cola, si ocurre un error dentro de ese método tendríamos que implementar una forma de cómo informar al usuario si la ejecución fue exitosa o no. En mi caso el que se encarga de realizar este trabajo es el package que tiene implementado que envíe un mail si fue exitoso o si se produjo un error.