Come impostare la connessione .mdb dinamica del pacchetto SSIS durante l'esecuzione del pacchetto dall'applicazione .NET

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

Domanda

Attualmente sto lavorando su un'applicazione desktop VB.NET che utilizza file di database .mdb (Access) sul back-end. I file .mdb vengono aperti e modificati nell'app VB.NET. Una volta completata la modifica, gli utenti dovranno importare i dati nel nostro database di SQL Server. Questo è un compito facile, finché non si tenta di introdurre lo scenario dinamico del percorso file.

Ho una discreta esperienza con SSIS ma ho qualche problema ad affrontarlo. Ho creato un WinForm che consente all'utente di accedere al file .mdb di propria scelta. I nomi di file .mdb contengono informazioni di data / ora, per renderli unici. (Non ho sviluppato questa parte dell'app, di recente ho iniziato a lavorare su questo, quindi i problemi. Non vorrei timestamp di un nome file .mdb ma questo è quello che sono costretto a usare!).

Comunque, devo passare il nome file e il percorso al mio pacchetto SSIS, in modo dinamico. Vedo dove crei le variabili per ConnectionString, ecc. Ma non sono davvero sicuro dei dettagli e quale tipo di connessione dati dovrei usare per MS Access (Ole DB, ODBC o Jet 4.0 per Office ??) ce ne sono molti! !)

Suppongo anche che la stringa di connessione della mia connessione dati debba essere dinamica, poiché il pacchetto utilizzerà il file .mdb come SOURCE. Ma come si crea una connessione dati dinamica in SSIS per i file .mdb?

E come posso passare la stringa nome file / percorso al mio pacchetto SSIS?

Attualmente sto prototipando con questo codice:

    '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. Come posso passare il percorso del file .mdb al mio pacchetto SSIS? LoadPackage forse?
  2. Come posso usare la posizione dinamica del file nella mia connessione dati per il mio pacchetto SSIS?

È abbastanza semplice caricare un file .mdb NON dinamico. Impostare l'origine e la destinazione è abbastanza semplice fino a quando non si introduce l'aspetto DINAMICO della selezione dell'utente. Come è possibile in SSIS?

ogni aiuto è molto apprezzato. Grazie.

È stato utile?

Soluzione

Questo cambierà alcuni, a seconda della connessione e del metodo di esecuzione che usi ma è sostanzialmente lo stesso per ottenere le variabili nel pacchetto. È da un po 'che non uso SSIS, quindi potrebbe essere un po' fuori uso. Ma è per lo più semplice una volta che hai capito i primi passi.

Per ottenere variabili nel pacchetto:

  • Crea una variabile nel pacchetto per contenere il nome del file. Fai clic sulla superficie del designer per assicurarti di trovarti nell'ambito del pacchetto, apri le finestre Variabili, fai clic su Nuovo e specifica il nome della variabile (" filePath "), il tipo (" String ") e assegnagli un valore predefinito .
  • Imposta la variabile dal tuo codice VB.Net:

In 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)
  • Ora dovresti avere accesso alla variabile nel pacchetto.

A seconda della connessione che si sta utilizzando per importare il db di Access, potrebbe essere necessario eseguire alcune operazioni diverse. Se si utilizza una connessione OLEDB, sono presenti una stringa di connessione e la proprietà ServerName. Imposta la proprietà ServerName per utilizzare la variabile che ha il percorso del tuo file ( @ [User :: filePath] ) e la stringa di connessione per usare anche la variabile filePath ( " Origine dati = " + @ [Utente :: filePath] + " ;; Provider = Microsoft.Jet.OLEDB.4.0; " )

Dai un'occhiata a questo file di testo esempio su come usare le espressioni per impostare dinamicamente la stringa di connessione. Questo è per Access ma è complicato con le stringhe di connessione di un database.

Altri suggerimenti

Non chiamo i pacchetti SSIS dai programmi, quindi non so come configurarli in quel modo. So che quando uso una gestione connessione OLEDB e utilizzo il "provider OLE DB Jet 4.0 nativo", posso impostare la proprietà ServerName della gestione connessione sul percorso del file .MDB.

Mi avvicino a questo spostando il file in importing.mdb. Quindi la gestione connessione è statica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top