0

我在以编程方式设置连接字符串时遇到问题。

这是我的项目的概述。我正在使用 2012 SSIS,并且在我的连接管理器中有两个连接(源和目标,都是 OLE DB 连接)。我有多个要运行的软件包。这些包中的每一个仅包含执行 SQL 任务。每个任务我都将 SQL 语句连接类型设置为 OLE DB,连接是目标,SQL 源类型是文件连接,文件连接是位于我的 C 驱动器上的一个文件,它是我在我的程序。

我将这些软件包部署在我的服务器上,这是一个 2012 实例。源连接和目标连接也在我的服务器上,但在 2008 R2 实例上。

我遍历 N 个数据库。在每个循环中,我可以通过执行 SQL 语句来设置 Connection String 和 IntialCatalog 属性:

DECLARE @var sql_variant = N'Data Source=MyServerName\SQL2008R2;初始目录=DatabaseName1;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;'

EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20,@parameter_name=N'CM.Destination.ConnectionString',@object_name=N'MAC',@folder_name=N'MAC',@project_name=N' MAC',@value_type=V,@parameter_value=@var

这确实有效,因为我可以在我的项目中打开配置选项,并在我逐步执行程序时看到连接字符串和初始目录值发生了变化。(我没有包含初始目录的 SQL,但它类似于连接字符串)

现在,当我通过程序执行此操作时,出现以下错误:

未找到连接“{9C2C8088-CE67-4D93-81B8-EC364D6E78D1}”。当未找到指定的连接元素时,Connections 集合会引发此错误。

有没有办法更新包,以便执行 SQL 任务有更新的连接?

附带说明一下,如果我在 Visual Studio 中打开包并修改连接,则包会执行。当我尝试以编程方式更改连接并执行时,或者当我尝试执行部署在服务器上的包时,它会出错。

我确实看到了这个问题,虽然它很相似,但我认为它的变化足以有一个单独的问题。 在包中找不到 SSIS 连接。我在这里找到了很多很棒的信息,只是还不是我想要的。

非常感谢任何帮助/建议!

谢谢

标记

4

1 回答 1

0

我的建议是利用 SSIS 的 Foreach Loop 容器将数据库循环和连接字符串设置移动到包中。

  1. 在您的包中创建一个新的字符串变量。称它为“用户::目标连接字符串”。
  2. 右键单击您的目标连接并选择属性。
  3. 为您的连接的 ConnectionString 属性创建一个表达式并设置为您的 User:DestinationConnectionString 变量。
  4. 将所有连接字符串放在一个表中。我们称它为 ConnectionStrings。
  5. 在包的开头创建一个执行 SQL 任务。我们称之为“获取连接字符串”。
  6. 将连接设置到 ConnectionStrings 表所在的位置。
  7. 编写查询以检索连接字符串。
  8. 将结果集设置为完整结果集。
  9. 将您的结果集设置为 Object 类型的变量。我们称它为 User::ConnectionStrings。(结果名称应为 0。)
  10. 创建一个 ForEach 循环容器。将其命名为“对于每个连接字符串”。
  11. 将集合枚举器设置为 Foreach ADO 枚举器。
  12. 将 ADO 对象源变量设置为 User::ConnectionStrings。
  13. 在变量映射选项卡中,将索引 0 映射到您的 User::DestinationConnectionString 变量。
  14. 将您的执行 SQL 任务放在您的 foreach 循环中。

现在,当包运行时,它将遍历每个连接字符串,将其分配给变量,连接使用该变量来获取其连接,然后 SQL 任务将针对该变量运行。

如果您直到运行时才知道数据库连接字符串,您可以将它们写入表中,然后启动您的包。

于 2013-06-06T19:20:04.573 回答