Sql 如何在从.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??sheesh有很多!!) 我还假设我的数据连接的连接字符串必须是动态的,因为包将使用.mdb文件作为源。但是如何在SSIS中为.mdb文件创建动态数据连接 如何将文件名/路径字符串传递到SSIS包 我目前正在使用以下代码进行原型设计: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文件名中包含时间戳/日期信息,以使其唯一。(我没有开发应用程序的这一部分,我最近开始做这方面的工作,因此出现
'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
谢谢。我不从程序调用SSIS包,所以我不知道如何以这种方式配置它们。我确实知道,当我使用OLEDB连接管理器并使用“本机OLE DB Jet 4.0提供程序”时,我可以将连接管理器的ServerName属性设置为.MDB文件的路径。这将根据您使用的连接和执行方法进行一些更改,但将变量放入包基本相同。我已经有一段时间没有使用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)
- 您现在应该可以访问包中的变量
@[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,让我们自己编写代码!!我知道这会发生,但一旦我整理好数据类型,我将发布最终解决方案。感谢大家的投入。非常感谢。。。