Как установить динамическое соединение .mdb пакета служб SSIS при запуске пакета из приложения .NET - PullRequest
1 голос
/ 07 мая 2009

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

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

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

Ответы [ 3 ]

3 голосов
/ 07 мая 2009

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

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

  • Создайте переменную в пакете для хранения имени файла. Щелкните поверхность конструктора, чтобы убедиться, что вы находитесь в области действия уровня пакета, откройте окна переменных, нажмите кнопку «Создать» и укажите имя переменной («filePath»), тип («String») и присвойте ему значение по умолчанию.
  • Установите переменную из вашего кода VB.Net:

В 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;")

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

0 голосов
/ 19 августа 2009

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

0 голосов
/ 07 мая 2009

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

...