以编程方式为sql 2012 ssis软件包设置连接字符串

时间:2013-06-06 18:42:19

标签: ssis

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

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

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

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

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

EXEC [SSISDB]。[catalogue。] [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 Connection not found in package。我在这里找到了很多很棒的信息,而不是我正在寻找的东西。

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

由于

标记

1 个答案:

答案 0 :(得分:0)

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

  1. 在包中创建一个新的字符串变量。称之为“User :: DestinationConnectionString”。
  2. 右键单击“目标”连接,然后选择“属性”。
  3. 为连接的ConnectionString属性创建一个Expression,并设置为User:DestinationConnectionString变量。
  4. 将所有连接字符串放在表格中。我们称之为ConnectionStrings。
  5. 在包的开头创建一个执行SQL任务。我们称之为“获取连接字符串”。
  6. 设置ConnectionStrings表所在的连接。
  7. 编写查询以检索连接字符串。
  8. 将ResultSet设置为完整结果集。
  9. 将结果集设置为Object类型的变量。我们称之为User :: ConnectionStrings。 (结果名称应为0。)
  10. 创建一个ForEach循环容器。将其命名为“For Each Connection String。”
  11. 将Collection Enumerator设置为Foreach ADO枚举器。
  12. 将ADO Object Source变量设置为User :: ConnectionStrings。
  13. 在Variable Mappings选项卡中,将Index 0映射到User :: DestinationConnectionString变量。
  14. 将您的执行SQL任务放在foreach循环中。
  15. 现在,当程序包运行时,它将循环遍历每个连接字符串,将其分配给变量,连接用于获取其连接,然后SQL任务将运行该变量。

    如果您在运行时之前不知道数据库连接字符串,则可以将它们写入表中,然后启动程序包。