我遇到了以编程方式设置连接字符串的问题。
以下是我的项目概述。我正在使用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。我在这里找到了很多很棒的信息,而不是我正在寻找的东西。
非常感谢任何帮助/建议!
由于
标记
答案 0 :(得分:0)
我的建议是利用SSIS的Foreach循环容器在包中移动数据库循环和连接字符串设置。
现在,当程序包运行时,它将循环遍历每个连接字符串,将其分配给变量,连接用于获取其连接,然后SQL任务将运行该变量。
如果您在运行时之前不知道数据库连接字符串,则可以将它们写入表中,然后启动程序包。