Как настроить динамическое подключение к пакету SSIS .mdb При запуске пакета из .СЕТЕВОЕ приложение

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

Вопрос

В настоящее время я работаю над VB.NET настольным приложением, которое использует файлы базы данных .mdb (Access) на серверной части.mdb-файлы открываются и редактируются в приложении VB.NET.Как только редактирование будет завершено, пользователям необходимо будет импортировать данные в нашу базу данных SQL Server.Это простая задача, пока вы не попытаетесь ввести сценарий динамического пути к файлу.

У меня есть изрядный опыт работы с SSIS, но у меня возникают некоторые проблемы с подходом к этому.Я создал WinForm, которая позволяет пользователю перейти к файлу .mdb по своему выбору.Имена файлов .mdb содержат информацию о метке времени / дате, чтобы сделать их уникальными.(Я не разрабатывал эту часть приложения, я недавно начал работать над этим, отсюда и проблемы.Я бы не стал ставить временную метку в имени файла .mdb, но это то, что я вынужден использовать!).

В любом случае, мне нужно динамически передать имя файла и путь к моему SSIS-пакету.Я вижу, где вы создаете переменные для ConnectionString и т.д.Но я действительно не уверен в деталях и в том, какой тип подключения для передачи данных я должен использовать для MS Access (Ole DB, ODBC или Jet 4.0 для Office??блин, их там очень много!!)

Я также предполагаю, что строка подключения моего подключения к данным должна быть динамической, поскольку пакет будет использовать mdb-файл в качестве ИСХОДНОГО.Но как создать динамическое подключение к данным в SSIS для MDB-файлов?

И как мне передать строку имени файла / пути в мой пакет SSIS?

В настоящее время я создаю прототип с помощью этого кода:

    '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. Как мне передать местоположение mdb-файла в мой пакет SSIS?Может быть, грузовой пакет?
  2. Как мне использовать динамическое расположение файла в моем подключении для передачи данных для моего пакета SSIS?

Загрузить mdb-файл, который НЕ является динамическим, довольно просто.Настроить источник и пункт назначения довольно просто, пока вы не введете ДИНАМИЧЕСКИЙ аспект выбора пользователя.Как это возможно в SSIS?

мы очень ценим любую помощь.Спасибо.

Это было полезно?

Решение

Это приведет к некоторым изменениям, в зависимости от используемого вами метода подключения и выполнения, но в основном это одно и то же для получения переменных в пакет.Прошло много времени с тех пор, как я использовал SSIS, так что это может быть немного не так.Но в основном это просто, как только вы разберетесь с начальными шагами.

Чтобы получить переменные в пакет:

  • Создайте переменную в пакете для хранения имени файла.Щелкните поверхность конструктора, чтобы убедиться, что вы находитесь на уровне пакета, откройте окна Переменных, нажмите Создать и укажите имя переменной ("Путь к файлу"), тип ("Строка") и присвоите ей значение по умолчанию.
  • Задайте переменную из вашей виртуальной машины.Сетевой код:

В 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)
  • Теперь у вас должен быть доступ к переменной в пакете.

В зависимости от соединения, которое вы используете для импорта базы данных Access, вам, возможно, придется выполнить несколько разных действий.Если вы используете OLEDB-соединение, существует строка подключения и свойство ServerName.Установите свойство ServerName таким образом, чтобы использовать переменную, в которой указан ваш путь к файлу (@[User::filePath]) и строку подключения, чтобы также использовать переменную filePath ("Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")

Проверьте пример этого текстового файла о том, как использовать выражения для динамической установки строки подключения. Этот предназначен для доступа но это сложно со строками подключения из базы данных.

Другие советы

Я не вызываю пакеты служб SSIS из программ, поэтому не знаю, как их настроить. Я точно знаю, что когда я использую диспетчер соединений OLEDB и использую «Native OLE DB Jet 4.0 Provider», я могу установить для свойства ServerName диспетчера соединений путь к файлу .MDB.

Я подхожу к этому, перемещая файл на importing.mdb. Тогда диспетчер соединений статичен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top