2010-02-01 15 views
9

Soy un novato en SSIS/C# (generalmente soy un desarrollador de Java) así que me disculpo si esta es una pregunta realmente estúpida.SSIS y volver a usar C#

Esencialmente el problema es este: tengo dos tareas de flujo de datos que cargan datos y los exportan a un formato de archivo plano heredado. El formateo se realiza mediante una tarea de secuencia de comandos (C#).

Lo que me gustaría hacer es compartir un código común entre los dos. p.ej. Podría crear una clase base común y luego extenderla para mis dos tareas de script diferentes.

Sin embargo, parece que SSIS realmente no tiene en cuenta esto.

¿Alguien sabe si hay una manera de lograr lo que quiero hacer?

+0

Posible duplicado de [SSIS: ¿Cómo reutiliza la secuencia de comandos en un componente de scripts en otro paquete?] (Http://stackoverflow.com/questions/6692779/ssis-how-do-you-reuse-script-in- a-scripting-component-in-another-package) –

Respuesta

10

Tiene razón al decir que no hay una forma directa de hacerlo directamente desde SSIS.

En un reciente proyecto, que tomó dos enfoques diferentes, que tanto funcionó bastante bien en función de lo que tiene que hacer:

  1. Crear una clase de utilidad (como una biblioteca de clase simple) y hacen referencia a él desde tus tareas de script Esto se hace más o menos como cualquier otro tipo de referencia. Si usa .NET 3.5, recuerde que deberá actualizar la versión manualmente en las tareas del script, ya que SSIS se configura de manera predeterminada en 2.0. También descubrimos que si queríamos algún tipo de reutilización en el ensamble de utilidades (sin depender de nombres de variables codificadas, etc.), entonces el paquete todavía tenía que tener una cantidad bastante grande de texto estándar de "configuración" para usar las secuencias de comandos de la utilidad.

  2. Crea un componente de flujo de datos personalizado. Este es un proceso mucho más complicado, pero finalmente hará lo mejor en términos de evitar la duplicación de código. Generalmente, la codificación del flujo de datos real es bastante simple y no es muy diferente de un componente de script, pero los diversos códigos de configuración que necesitará pueden tender a complicar las cosas. Tampoco hay mucho apoyo en SSIS para cuando algo sale mal. Llevado a mucho trabajo de detective en nuestro proyecto.

Si planea usar algo mucho, y se han comprometido a deshacerse de código repetitivo tanto como sea posible, 2 es la opción preferida. Si está siendo utilizado en algunos lugares aquí y allá, considere el simple enfoque de 1.

+0

el enlace en la otra respuesta da un paso por paso para # 1 –

1

Estoy bastante seguro de que es posible acceder a los ensamblados de .NET en los scripts de SSIS. Entonces podrías hacerlo de esta manera. Consulte the article "Accessing .NET assemblies with SSIS" en SQL Server Central.

+0

Esto es básicamente un buen paso a paso para # 1 en la respuesta superior –

0

Creo que tendrá que crear un ensamblado o servicio web para que esto funcione.

0

Esto no resuelve completamente su problema, pero ayuda a no tener que volver a crear todas las clases cada vez que las necesita (también lo hago no quiero implementar ensambles referenciados para mi proyecto actual). En primer lugar, necesita una copia maestra de sus clases, puede copiarlas de una tarea de secuencia de comandos existente utilizando el mismo proceso a continuación, pero a la inversa.

  1. Abra el Editor de la tarea Script y en el Explorador de Propiedad clic en el archivo de proyecto (el st_ [ía]), en la ventana Propiedades verá la ubicación de la carpeta de proyecto.(Esta ubicación se vuelve a crear cada vez que se edita la tarea de la escritura)

  2. En explorador, copiar sus clases en esta carpeta

  3. En el Explorador de proyectos, haga clic en el icono “Mostrar todos los archivos”

  4. Haga clic derecho sobre los archivos y agregar al proyecto

-1

Probablemente demasiado tarde para responder a esto, pero usted puede hacer clic en la solución y añadir una clase allí. Luego, cuando ingrese a sus scripts, puede decir agregar el objeto existente y buscar la clase que creó anteriormente. Para mí fue localizado por la solución para el proyecto. No he pasado por la implementación ni nada por esto, pero al menos puede acceder a la clase a través de las secuencias de comandos individuales.

+0

Esto funciona pero tiene inconvenientes significativos. Cada script se compila con su propia copia del código "compartido" y, a menos que toque cada tarea que utiliza el archivo al que se hace referencia, los cambios en el código compartido no tendrán efecto. Es decir, no volverán a compilarse automáticamente si cambia la fuente compartida. – bielawski

Cuestiones relacionadas