Procédure de définition de la connexion dynamique du package SSIS lors de l'exécution d'un package à partir d'une application .NET

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

Question

Je travaille actuellement sur une application de bureau VB.NET qui utilise les fichiers de base de données .mdb (Access) sur le backend. Les fichiers .mdb sont ouverts et modifiés dans l'application VB.NET. Une fois les modifications terminées, les utilisateurs devront importer les données dans notre base de données SQL Server. C’est une tâche facile, jusqu’à ce que vous essayiez d’introduire le scénario de chemin de fichier dynamique.

J’ai pas mal d’expérience avec SSIS, mais j’ai du mal à aborder cette question. J'ai créé un formulaire WinForm qui permet à l'utilisateur de rechercher le fichier .mdb de son choix. Les noms de fichiers .mdb contiennent des informations d'horodatage / date, ce qui les rend uniques. (Je n'ai pas développé cette partie de l'application, j'ai récemment commencé à travailler dessus, d'où les problèmes. Je ne voudrais pas horodater un nom de fichier .mdb, mais c'est ce que je suis obligé d'utiliser!).

Quoi qu'il en soit, je dois transmettre le nom de fichier et le chemin d'accès à mon package SSIS de manière dynamique. Je vois où vous créez des variables pour ConnectionString, etc. Mais je ne suis vraiment pas sûr des détails et du type de connexion de données que je devrais utiliser pour MS Access (Ole DB, ODBC ou Jet 4.0 pour Office… il y en a beaucoup! !)

Je suppose également que la chaîne de connexion de ma connexion de données doit être dynamique, car le package utilisera le fichier .mdb en tant que SOURCE. Mais comment créer une connexion de données dynamique dans SSIS pour les fichiers .mdb?

Et comment puis-je transmettre la chaîne nom_fichier / chemin d'accès à mon package SSIS?

Je suis actuellement en train de prototyper avec ce 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. Comment transférer l'emplacement du fichier .mdb dans mon package SSIS? LoadPackage peut-être?
  2. Comment utiliser l'emplacement du fichier dynamique dans ma connexion de données pour mon package SSIS?

Il est assez simple de télécharger un fichier .mdb qui n’est PAS dynamique. Il est très facile de définir la source et la destination jusqu'à ce que vous introduisiez l'aspect DYNAMIQUE de la sélection de l'utilisateur. Comment est-ce possible dans SSIS?

toute aide est grandement appréciée. Merci.

Était-ce utile?

La solution

Cela changera en fonction de la connexion et de la méthode d'exécution que vous utiliserez, mais il en va de même pour obtenir les variables dans le package. Cela fait un moment que je n’ai pas utilisé SSIS, c’est peut-être un peu désagréable. Mais c’est plutôt simple une fois que vous avez compris les étapes initiales.

Pour obtenir des variables dans le package:

  • Créez une variable dans le package pour contenir le nom du fichier. Cliquez sur la surface du concepteur pour vous assurer que vous vous trouvez au niveau du package, ouvrez la fenêtre Variables, cliquez sur Nouveau, spécifiez le nom de la variable ("filePath"), le type ("chaîne") et attribuez-lui une valeur par défaut. .
  • Définissez la variable à partir de votre code VB.Net:

Dans 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)
  • Vous devriez maintenant avoir accès à la variable du paquet.

En fonction de la connexion que vous utilisez pour importer la base de données Access, vous devrez peut-être effectuer plusieurs opérations différentes. Si vous utilisez une connexion OLEDB, il existe une chaîne de connexion et une propriété ServerName. Définissez la propriété ServerName pour qu'elle utilise la variable qui contient votre chemin de fichier ( @ [User :: filePath] ) et que la chaîne de connexion utilise également la variable filePath ( " Data Source = " + @ [User :: filePath] + " ;; Provider = Microsoft.Jet.OLEDB.4.0; " )

Découvrez ce fichier texte exemple pour savoir comment utiliser des expressions pour définir la chaîne de connexion de manière dynamique. Celle-ci est destinée à Access mais est compliquée par les chaînes de connexion d'une base de données.

Autres conseils

Je n’appelle pas les packages SSIS à partir de programmes, je ne sais donc pas comment les configurer de cette façon. Je sais que, lorsque j'utilise un gestionnaire de connexions OLEDB et le "Fournisseur natif OLE DB Jet 4.0", je peux définir la propriété ServerName du gestionnaire de connexions sur le chemin d'accès au fichier .MDB.

J'aborde ceci en déplaçant le fichier dans un fichier importing.mdb. Ensuite, le gestionnaire de connexion est statique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top