SSIS 连接管理器不使用 ConnectionString 值

SSIS Connection Manager not using the ConnectionString value

我有一个子包,其中连接管理器的 ConnectionString 属性 由父包变量配置设置。我设置了一个脚本任务,它在数据流任务之前显示一个消息框,其中包含 ConnectionString 属性 的值。

`MessageBox.Show(Dts.Connections["CPU_*"].ConnectionString.ToString());`

当我 运行 父包时,消息框显示连接字符串随每次迭代而变化,但在数据流中它总是从同一源提取数据。

我正在使用 SQL Server 2008 R2,连接管理器是 ADO.Net 类型,RetainSameConnection 设置为 False,我已经研究了好几天了。有人有什么想法吗?

更新(2/23/2015):让这个陌生人,当我查看诊断日志时,他们告诉我,当打开新连接时,他们正在使用新的连接字符串。

我在这里找到了答案 Passing SSIS Connection String in parent variable works but package still validates against child design value

我还不确定以后的版本,但肯定会在 2008R2 之前将连接字符串传递到子包中时出现错误。正如您正确指出的那样,连接字符串已通过,但要么在父配置之前评估连接,要么在父配置通过后从设计对象更新连接字符串。

无论如何都行不通。

如果您像我一样不想向所有包添加额外的脚本任务,则需要执行以下操作:

父包

  • 假设我们正在使用名为 MyDBConnection
  • 的 OLE DB 连接
  • 添加一个字符串变量来保存连接字符串 (MyConnection)
  • 添加一个 C# 脚本任务(在包任务之前):

    Dts.Variables["User::MyConnection"].Value = Dts.Connections["MyDBConnection"].ConnectionString;

子包

  • 添加一个字符串变量来保存连接字符串 (MyConnection)
  • 添加父包配置以传递MyConnection
  • 的值
  • 在 OLE DB 连接的属性中添加一个表达式以从 MyConnection
  • 更新连接字符串 属性