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