So stellen Sie SSIS-Paket dynamische .mdb Verbindung beim Ausführen eines Pakets aus einem .NET-Anwendung

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

Frage

Zur Zeit arbeite ich an einer VB.NET-Desktop-Anwendung, die MDB (Access) Datenbankdateien auf dem Backend verwendet. Die MDB-Dateien geöffnet und in der VB.NET app bearbeitet. Sobald die Bearbeitung abgeschlossen ist, müssen die Benutzer die Daten in unsere SQL Server-Datenbank importieren. Dies ist eine einfache Aufgabe, bis Sie versuchen, das dynamische Filepath Szenario einzuführen.

Ich habe eine ganze Menge Erfahrung mit SSIS aber einige Probleme mit Annäherung an dieses habe. Ich habe eine WinForm erstellt, die dem Benutzer ermöglicht, auf die MDB-Datei ihrer Wahl zu suchen. Die MDB-Dateinamen haben Zeitstempel / Datumsinformationen in ihnen, sie einzigartig zu machen. (Ich habe nicht diesen Teil der App entwickeln, die ich auf diesem vor kurzem zu arbeiten begann, damit die Probleme. Ich keinen .mdb Dateinamen zeitzustempeln würde, aber das ist, was Im verwenden gezwungen!).

Wie auch immer, ich brauche die Dateinamen und den Pfad zu meinem SSIS-Paket zu übergeben, dynamisch. Ich sehe, wo Sie Variablen für Connectionstring erstellen, etc. Aber ich bin wirklich nicht sicher über die Einzelheiten und welche Art von Datenverbindung I für MS Access (Ole DB, ODBC oder Jet 4.0 für Office verwenden sollte ?? sheesh gibt es eine Menge! !)

Ich gehe davon aus, dass meine Datenverbindung des Verbindungszeichenfolge dynamisch sein muss, da das Paket wird die MDB-Datei als Quelle verwenden. Aber wie schafft man eine dynamische Datenverbindung in SSIS für MDB-Dateien?

Und wie gehe ich den Dateinamen / Pfad Zeichenfolge mein SSIS-Paket?

Ich bin Prototyping zur Zeit mit diesem Code:

    '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. Wie gebe ich die MDB-Datei Speicherort mein SSIS-Paket? Loadpackage vielleicht?
  2. Wie verwende ich den dynamischen Dateipfad in meiner Datenverbindung für mein SSIS-Paket?

Es ist ganz einfach eine MDB-Datei zu laden, die nicht dynamisch ist. die Quell- und Ziel-Einstellung ist ganz einfach, bis Sie den dynamischen Aspekt der Benutzerauswahl einzuführen. Wie ist das möglich in SSIS?

Jede Hilfe wird sehr geschätzt. Danke.

War es hilfreich?

Lösung

Dies wird einige ändern, je nach Verbindung und Ausführungsmethode Sie verwenden, aber es ist im Grunde die gleiche, die Variablen in das Paket zu bekommen. Es ist schon eine Weile her, seit ich SSIS verwendet habe, so ist es ein wenig weg sein kann. Aber es ist vor allem einfach, wenn Sie die ersten Schritte erhalten herausgefunden.

Um Variablen in das Paket zu erhalten:

  • Erstellen Sie eine Variable in dem Paket, um die Dateinamen zu halten. Klicken Sie auf die Designer-Oberfläche, um sicherzustellen, Sie auf Paketebene Umfang sind, öffnen Sie die Variablen-Fenster, klicken Sie auf Neu und geben Sie den Namen der Variablen ( „filePath“), vom Typ ( „String“) und geben Sie ihm einen Standardwert.
  • Setzen Sie die Variable aus dem VB.Net Code:

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)
  • Sie sollten nun Zugriff auf die Variable im Paket haben.

Je nach Verbindung, die Sie mit der Access DB zu importieren, können Sie ein paar andere Dinge zu tun haben. Wenn Sie eine OLEDB-Verbindung verwenden, gibt es eine Verbindungszeichenfolge und Servername-Eigenschaft. Stellen Sie die Servername-Eigenschaft die Variable zu verwenden, die Ihren Dateipfad hat (@[User::filePath]) und die Verbindungszeichenfolge auch die filePath Variable zu verwenden ("Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")

Schauen Sie sich dieser Textdatei Beispiel wie Ausdrücke verwenden, um dynamisch die Verbindungszeichenfolge zu setzen. Dies ist für Zugang ist, aber mit Verbindungszeichenfolgen aus einer Datenbank kompliziert.

Andere Tipps

Ich nenne nicht SSIS-Pakete von Programmen, damit ich weiß nicht, wie sie auf diese Weise zu konfigurieren. Ich weiß, dass wenn ich eine OLEDB Connection Manager verwenden und die „native OLE DB-Jet 4.0-Provider“ verwenden, dass ich auf dem Weg in die MDB-Datei der Servername-Eigenschaft des Verbindungs-Manager eingestellt werden.

Ich gehe dies, indem Sie die Datei auf einen importing.mdb bewegen. Dann wird der Verbindungsmanager ist statisch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top