Sql 如何在从.NET应用程序运行包时设置SSIS包动态.mdb连接

Sql 如何在从.NET应用程序运行包时设置SSIS包动态.mdb连接,sql,ms-access,dynamic,ssis,filepath,Sql,Ms Access,Dynamic,Ssis,Filepath,我目前正在开发一个VB.NET桌面应用程序,该应用程序在后端使用.mdb(Access)数据库文件。.mdb文件在VB.NET应用程序中打开和编辑。编辑完成后,用户需要将数据导入SQL Server数据库。在尝试引入动态文件路径场景之前,这是一项简单的任务 我有相当多的SSIS经验,但在处理这一问题时遇到了一些困难。我创建了一个WinForm,允许用户浏览到他们选择的.mdb文件。.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??sheesh有很多!!)

我还假设我的数据连接的连接字符串必须是动态的,因为包将使用.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包,所以我不知道如何以这种方式配置它们。我确实知道,当我使用OLEDB连接管理器并使用“本机OLE DB Jet 4.0提供程序”时,我可以将连接管理器的ServerName属性设置为.MDB文件的路径。

    这将根据您使用的连接和执行方法进行一些更改,但将变量放入包基本相同。我已经有一段时间没有使用SSIS了,所以可能有点不合适。但是,一旦你弄清楚了最初的步骤,这就很简单了

    要将变量放入包中,请执行以下操作:

    • 在包中创建一个变量来保存文件名。单击设计器界面以确保处于包级别范围,打开变量窗口,单击新建并指定变量名称(“文件路径”)、类型(“字符串”),并为其指定默认值
    • 从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变量(
    “数据源=“+@[User::filePath]+”;Provider=Microsoft.Jet.OLEDB.4.0;”


    查看如何使用表达式动态设置连接字符串。但是使用数据库中的连接字符串会很复杂。

    我通过将文件移动到importing.mdb来实现这一点。然后连接管理器是静态的。

    我知道了如何从VB应用程序设置包级变量。它应该是这样的:pkg.Variables(“databasePath”).Value=databasePath谢谢。我需要找出如何做到这一点,但编程。对于SSIS中的dynamic.mdb文件,MSDN或google并没有提供太多帮助。如果这是Excel或CSV,它将非常简单,但SSIS中用于访问的整个数据访问连接对象很麻烦。谢谢你的帮助!最后一个访问示例非常有用。我现在正在创建一个解决方案,它是动态工作的,但是我的数据类型出现了错误。显然,SQL数据类型不喜欢Access数据类型和SSI,让我们自己编写代码!!我知道这会发生,但一旦我整理好数据类型,我将发布最终解决方案。感谢大家的投入。非常感谢。。。