动态连接管理器在ssis中使用sql身份验证

时间:2017-03-02 05:59:57

标签: dynamic ssis

我正在尝试使用Connection字符串创建动态连接。像(IP, DBname, username and password)这样的必需详细信息存储在数据库中,我从Execute SQL task获取这些详细信息并存储在variables中。从这些我使用表达式创建连接字符串。当我使用Windows身份验证和以下连接字符串时,这可以正常工作。

"Data Source="+ @[User::IP] +";Initial Catalog=" +@[User::DBN] +";Provider=SQLNCLI11;Integrated Security=SSPI;Auto Translate=False;"

然而,当我尝试为SQL身份验证添加用户名和密码时,SSIS给了我错误。

"Data Source="+ @[User::IP] +";User ID="+ @[User::USR]  +"Password= "+ @[User::PASS] +" ;Initial Catalog=" + @[User::DBN] + ";Provider=SQLNCLI11.0;"
  

错误:

     

[OLE DB Source [22]]错误:SSIS错误代码   DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。该   AcquireConnection方法调用连接管理器XXXXXXXXXXXXX   失败,错误代码为0xC0202009。可能会发布错误消息   在此之前有关于为什么采用AcquireConnection方法的更多信息   呼叫失败。

不确定是什么问题。有人可以帮我解决我在这里做错了什么。

3 个答案:

答案 0 :(得分:0)

首先 - 您在+"Password= "术语之前缺少分号,并且在此表达式的末尾有多余的空格。连接字符串必须很珍贵。
第二 - 当您使用动态连接管理器时,我建议设置任务属性 DelayValidation = true ,以便在执行任务之前验证您的任务,并使用正确的连接字符串。

答案 1 :(得分:0)

您的连接字符串表达式看起来很好,但需要删除额外的空格并在password之前添加分号

"Data Source="+ @[User::IP] +";User ID="+ @[User::USR]  +";Password="+ @[User::PASS] +";Initial Catalog=" + @[User::DBN] + ";Provider=SQLNCLI11;Auto Translate=False;"

答案 2 :(得分:0)

实际上,这是我在尝试做相同的事情时起作用的。相同的变量(除了将它们设置为Project参数外)并使用针对连接字符串格式记录的更正。我有一个脚本任务,该脚本任务在正确的位置使用字符串concat和项目参数设置了一个名为“ DBConnection”的内部变量。由于密码是敏感密码,因此请不要忘记使用GetSensitiveValue。然后在连接管理器属性上,将表达式属性连接字符串设置为已评估的用户变量DBConnection。在任务上以及在容器中也要在容器上设置延迟验证。

脚本任务中的代码:Dts.Variables [“ User :: DBConnection”]。Value =“数据源=” + Dts.Variables [“ $ Project :: ServerName”]。Value.ToString()+“; User ID =“ + Dts.Variables [” $ Project :: DBUserName“]。Value.ToString()+”; Password =“ + Dts.Variables [” $ Project :: DBPassword“]。GetSensitiveValue()。ToString()+ “; Initial Catalog =” + Dts.Variables [“ $ Project :: DBName”]。Value.ToString()+“; Provider = SQLNCLI11.1; Auto Translate = False;”;