我目前正在开发一个 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
  1. 如何将 .mdb 文件位置传递到我的 SSIS 包?也许加载包?
  2. 如何在 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来解决此问题。然后连接管理器是静态的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top