En todo proyecto, puede surgir la necesidad de lanzar paquetes SSIS al vuelo mediante .NET. Este post está centrado en mostrar una forma de hacerlo utilizando las librerias de administración de SSIS y en dar una idea de al menos, como podeis empezar.
Ejecutar manualmente
Recordemos que para lanzar un paquete SSIS podeis utilizar el SQL Server Management Studio de la siguiente forma:
1. Conectar al servidor de SSIS (por ejemplo vulcano2):
[box type=”info”] NOTA: No es posible utilizar las herramientas de SQL Server Express para conectar a Integration Services, hay que utilizar la versión Developer o Enterprise[/box]
2. Ir a Stored Packages->MSDB->DTS (la carpeta DTS ha sido creada manualmente por mi para el ejemplo)
3. Con botón derecho en el paquete SSIS a ejecutar, si lanzar “Run Package”:
Este es el formulario de ejecución donde poder dar valor a variables. Para terminar ejecutando, click en “execute”.
Por código Visual Basic.NET
El proposito de la entrada de este post es ejecutar código mediante código .NET. Para ello existen dos opciones para realizar ejecuciones de paquetes SSIS mediante código, la primera consiste en utilizar las clases de la librería Microsoft.SqlServer.ManagedDTS.dll y la otra utilizar la aplicación enominada dtexec que viene con las herramientas de inteligencia de negocio de SQL Server.
En ambos casos, hay que instalar como mínimo las herramientas cliente de inteligencia de negocio como vemos en la imagen (no es necesario instalar ningun sevicio de SQL Server en los clientes por tanto, ni las herramientas de administración):
[box type=”info”] NOTA: La imagen corresponde a instalación de SQL Server express con herramientas avanzadas[/box]Para obtener tanto la herramienta, como las dll, en este caso si que nos vale por tanto utilizar la versión express con herramientas cliente avanzadas: http://www.microsoft.com/downloads/details.aspx?familyid=B5D1B8C3-FDA5-4508-B0D0-1311D670E336&displaylang=es
Ejecución mediante código Visual Basic
Una vez tenemos las librerías instaladas en el equipo desde donde queramos lanzar los paquetes SSIS, podemos utilizar código como el siguiente para efectuar ejecuciones de los mismos:
A continuación vemos como sería el código en Visual Basic.NET para ejecutar un Paquete SSIS.
[box type=”info”] NOTA: Si la aplicación no es .NET (por ejemplo, si es VB6) hay que programar un wrapper de acceso a la libreria ManagedDTS mencionada anteriormente (el código de más abajo es VB.NET). Más adelante, se da opción de utilizar dtexec, si no se quiere implementar dicho wrapper[/box]
Los paquetes deben estar desplegados en el servicio de Integration Services y además según se puede ver en el ejemplo de código, haberse desplegado sobre la carpeta DTS (no es requisito, pero para el ejemplo se ha realizado de esta forma, para ir alineados con las imágenes anteriores también).
Imports DTS = Microsoft.SqlServer.Dts.Runtime
Module Module1
Sub Main()
Dim instance As DTS.Application
Dim packagePath As String
Dim serverName As String
Dim serverUserName As String
Dim serverPassword As String
Dim events As DTS.IDTSEvents
Dim returnValue As DTS.Package
Dim executionResult As DTS.DTSExecResult
instance = New DTS.Application()
packagePath = "DTS__TuDTSVaAqui__"
serverName = "__TuServidorVaAqui__"
serverUserName = "solidq" 'Nombre de usuario
serverPassword = "solidq" 'Password de usuario
events = Nothing
returnValue = instance.LoadFromSqlServer(packagePath, serverName, serverUserName, serverPassword, Nothing)
‘Para asignar propiedades a variables
‘pkg.Variables("VarName").Value = "Value"
executionResult = returnValue.Execute()
If executionResult = DTS.DTSExecResult.Success Then
Console.WriteLine("Paquete ejecutado correctamente")
Else
If executionResult = DTS.DTSExecResult.Failure Then
Console.WriteLine("Se produjo un error al ejecutar el paquete")
End If
End If
Console.ReadKey()
End Sub
End Module
Ejecución mediante línea de commandos dtexec
Este método es el más sencillo y consiste en lanzar el paquete utilizando la aplicación dtexec, destinada especialment para ello.
Se parte de la base nuevamente en que se ha instalado la herramienta en el cliente y por tanto se encuentra instalada y accessible (por defecto se encuentra en C:Program FilesMicrosoft SQL Server100DTSBinn)
Se trataria por tanto de realizar una llamada desde visual basic a la aplicación dtexec con los parámetros necesarios (ver imagen adjunta como ejemplo sencillo):
Por ejemplo, para lanzar el paquete llamado “paquetePrueba” que se encuentra en el servidor “yo-pcsql2008r2”, utilizando un usuario de sql “usuariosql” y password “passwordusuario”, asignando valor a la variable llamada “miVariable”, podríamos crear una llamada como esta:
Dtexec /ser yo-pcsql2008r2 /U usuariosql /P passwordusuario /sq paquetePrueba /set package.variable[miVariable].Value;AquiPonesElValorQueQuieresAsignar
[box type=”info”] NOTA: Para información sobre los parámetros de entrada podemos utiliza dtexec /? O diréctamente dirigirnos a la web de consulta de dtexec aqui: http://technet.microsoft.com/en-us/library/ms162810(SQL.100).aspx[/box]Que lo disfruteis.