1

我目前正在开发一个在后端使用 .mdb (Access) 数据库文件的 VB.NET 桌面应用程序。.mdb 文件在 VB.NET 应用程序中打开和编辑。编辑完成后,用户需要将数据导入我们的 SQL Server 数据库。这是一项简单的任务,直到您尝试引入动态文件路径方案。

我在 SSIS 方面有相当多的经验,但在解决这个问题时遇到了一些麻烦。我创建了一个 WinForm,允许用户浏览到他们选择的 .mdb 文件。.mdb 文件名中包含时间戳/日期信息,以使它们独一无二。(我没有开发应用程序的这一部分,我最近开始研究这个,因此出现了问题。我不会为 .mdb 文件名加上时间戳,但这是我被迫使用的!)。

无论如何,我需要动态地将文件名和路径传递给我的 SSIS 包。我看到你在哪里为 ConnectionString 等创建变量。但我真的不确定细节以及我应该为 MS Access 使用什么类型的数据连接(Ole DB、ODBC 或 Jet 4.0 for Office??哎呀有很多! !)

我还假设我的数据连接的连接字符串必须是动态的,因为包将使用 .mdb 文件作为 SOURCE。但是如何在 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 中怎么可能?

任何帮助是极大的赞赏。谢谢你。

4

3 回答 3

3

这会有所改变,具体取决于您使用的连接和执行方法,但将变量放入包中基本相同。自从我使用 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 db 的连接,您可能需要做一些不同的事情。如果您使用的是 OLEDB 连接,则有一个连接字符串和 ServerName 属性。设置 ServerName 属性以使用具有文件路径 ( @[User::filePath]) 的变量和连接字符串以也使用 filePath 变量 ( "Data Source=" + @[User::filePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;")

查看此文本文件示例,了解如何使用表达式动态设置连接字符串。这个是用于 Access 的,但对于来自数据库的连接字符串很复杂。

于 2009-05-07T18:35:09.007 回答
0

我不从程序中调用 SSIS 包,所以我不知道如何配置它们。我确实知道,当我使用 OLEDB 连接管理器并使用“Native OLE DB Jet 4.0 Provider”时,我可以将连接管理器的 ServerName 属性设置为 .MDB 文件的路径。

于 2009-05-07T17:15:55.830 回答
0

我通过将文件移动到 importing.mdb 来解决这个问题。然后连接管理器是静态的。

于 2009-08-19T13:49:44.877 回答