从 .NET 应用程序运行包时如何设置 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 for 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 以来已经有一段时间了,所以它可能有点不太对劲。但一旦你弄清楚了最初的步骤,一切就变得很简单了。
要将变量放入包中:
- 在包中创建一个变量来保存文件名。单击设计器界面以确保位于包级别范围,打开“变量”窗口,单击“新建”并指定变量的名称(“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;"
)
其他提示
我没有从程序中调用SSIS包,所以我不知道如何以这种方式配置它们。我知道当我使用OLEDB连接管理器并使用“Native OLE DB Jet 4.0 Provider”时,我可以将连接管理器的ServerName属性设置为.MDB文件的路径。
我通过将文件移动到imports.mdb来解决此问题。然后连接管理器是静态的。