我正在尝试使用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方法的更多信息 呼叫失败。
不确定是什么问题。有人可以帮我解决我在这里做错了什么。
答案 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;”;