Cómo configurar la conexión .mdb dinámica del paquete SSIS al ejecutar el paquete desde la aplicación .NET

StackOverflow https://stackoverflow.com/questions/835765

Pregunta

Actualmente estoy trabajando en una aplicación de escritorio VB.NET que utiliza archivos de base de datos .mdb (Access) en el back-end. Los archivos .mdb se abren y editan en la aplicación VB.NET. Una vez que se complete la edición, los usuarios deberán importar los datos a nuestra base de datos de SQL Server. Esta es una tarea fácil, hasta que intente introducir el escenario de ruta de archivo dinámica.

Tengo bastante experiencia con SSIS pero tengo algunos problemas para abordar esto. He creado un WinForm que permite al usuario buscar el archivo .mdb de su elección. Los nombres de archivo .mdb tienen información de fecha y hora en ellos, para que sean únicos. (No desarrollé esta parte de la aplicación, recientemente comencé a trabajar en esto, de ahí los problemas. No marcaría el tiempo de un nombre de archivo .mdb, ¡pero esto es lo que estoy obligado a usar!).

De todos modos, necesito pasar el nombre de archivo y la ruta a mi paquete SSIS, dinámicamente. Veo dónde creas variables para ConnectionString, etc. Pero no estoy seguro de los detalles y qué tipo de conexión de datos debo usar para MS Access (Ole DB, ODBC o Jet 4.0 para Office; ¡hay muchos! !)

También supongo que la cadena de conexión de mi conexión de datos debe ser dinámica, ya que el paquete usará el archivo .mdb como FUENTE. Pero, ¿cómo se crea una conexión de datos dinámica en SSIS para archivos .mdb?

¿Y cómo paso la cadena de nombre de archivo / ruta a mi paquete SSIS?

Actualmente estoy creando prototipos con este código:

    'Execute the SSIS_Import package 
    Dim pkgLocation As String
    Dim pkg As New Package
    Dim app As New Microsoft.SqlServer.Dts.Runtime.Application
    Dim pkgResults As DTSExecResult
    Dim eventListener As New EventListener()

    Try
        pkgLocation = "C:\SSIS_DataTransfer\ImportPackage.dtsx"

        'TO-DO: pass databasePath variable to SSIS package here ???
        pkg = app.LoadPackage(pkgLocation, eventListener)
        pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)

        Select Case pkgResults

            Case DTSExecResult.Completion
                MsgBox("Data import completed!")

            Case DTSExecResult.Success
                MsgBox("Data import was successful!")

            Case DTSExecResult.Failure
                MsgBox("Data import was not successful!")

        End Select

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
  1. ¿Cómo paso la ubicación del archivo .mdb a mi paquete SSIS? ¿LoadPackage quizás?
  2. ¿Cómo uso la ubicación del archivo dinámico en mi conexión de datos para mi paquete SSIS?

Es bastante simple cargar un archivo .mdb que NO es dinámico. Establecer la fuente y el destino es bastante fácil hasta que introduce el aspecto DINÁMICO de la selección del usuario. ¿Cómo es esto posible en SSIS?

cualquier ayuda es muy apreciada. Gracias.

¿Fue útil?

Solución

Esto cambiará un poco, dependiendo de la conexión y el método de ejecución que utilice, pero es básicamente lo mismo introducir las variables en el paquete. Ha pasado un tiempo desde que usé SSIS, por lo que puede estar un poco apagado. Pero es principalmente sencillo una vez que se resuelven los pasos iniciales.

Para obtener variables en el paquete:

  • Cree una variable en el paquete para contener el nombre del archivo. Haga clic en la superficie del diseñador para asegurarse de que se encuentra en el ámbito del nivel del paquete, abra las ventanas de Variables, haga clic en Nuevo y especifique el nombre de la variable (" filePath "), el tipo (" String ") y dele un valor predeterminado .
  • Establezca la variable desde su código VB.Net:

En VB.NET:

pkg = app.LoadPackage(pkgLocation, eventListener)
' Set the file path variable in the package
' NB: You may need to prefix "User::" to the variable name depending on the execution method
pkg.Variables("filePath").Value = databasePath
pkgResults = pkg.Execute(Nothing, Nothing, eventListener, Nothing, Nothing)
  • Ahora debería tener acceso a la variable en el paquete.

Dependiendo de la conexión que esté utilizando para importar Access db, es posible que tenga que hacer algunas cosas diferentes. Si está utilizando una conexión OLEDB, hay una cadena de conexión y la propiedad ServerName. Establezca la propiedad ServerName para usar la variable que tiene su ruta de archivo ( @ [User :: filePath] ) y la cadena de conexión para usar también la variable filePath ( " Data Source = " + @ [User :: filePath] + " ;; Provider = Microsoft.Jet.OLEDB.4.0; " )

Consulte este archivo de texto ejemplo sobre cómo usar expresiones para establecer la cadena de conexión dinámicamente. Este es para Access pero es complicado con las cadenas de conexión de una base de datos.

Otros consejos

No llamo paquetes SSIS desde programas, así que no sé cómo configurarlos de esa manera. Sé que cuando uso un Administrador de conexión OLEDB y uso el "Proveedor nativo OLE DB Jet 4.0", puedo configurar la propiedad ServerName del administrador de conexión en la ruta al archivo .MDB.

Me acerco a esto moviendo el archivo a importing.mdb. Entonces el administrador de conexión es estático.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top