SSIS Foreach循环容器OLE DB-动态连接问题

时间:2019-05-08 07:07:04

标签: ssis expression foreach-loop-container

我正在建立一个新的数据仓库(服务器1),需要从同一服务器(服务器2)上的3个不同数据库中获取数据。一切正常,直到我尝试使连接动态化。

我创建了一个包含4个变量的Foreach循环容器FLC

  • 服务器名
  • 数据库
  • 用户
  • Pw

在FLC中,我添加了数据流任务DFT,并在DFT中添加了OLE DB源 enter image description here enter image description here enter image description here enter image description here

在OLE DB Source连接属性中,我添加了1变量作为表达式。 直接将连接转到脱机状态,并且OLE DB Source给出错误。错误消息:

  

数据流任务[OLE DB源5]上的错误:SSIS错误代码   DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。的   对连接管理器“测试”的AcquireConnection方法调用失败   错误代码为0xC0014041。之前可能发布了错误消息   有关为什么AcquireConnection方法调用的更多信息   失败。

     

数据流任务[SSIS.Pipeline]错误:OLE DB源失败   验证并返回错误代码0xC020801C。

     

数据流任务[SSIS.Pipeline]出错:一个或多个组件失败   验证。

     

数据流任务出错:任务验证过程中出错。

     

软件包错误:连接管理器“测试”将无法获取   连接,因为连接管理器的OfflineMode属性为   真正。当OfflineMode为TRUE时,无法获取连接。

     

(Microsoft.DataTransformationServices.VsIntegration)

1 个答案:

答案 0 :(得分:0)

首先,您使用的是不足的以下提供程序:

  

用于ODBC驱动程序的Microsoft OLE DB提供程序

相反,请在连接管理器中选择SQL Server Native Client 11

下一步是将“数据流任务”和OLEDB源Delay Validation属性更改为True,因为如果变量的默认值为空,则会在程序包验证阶段引发错误(一旦执行)

更新1-ConnectionString属性

使用连接字符串表达式代替将表达式分配给多个连接管理器属性:

"Data Source=" + @[User::SERVER] + ";User ID=" + @[User::USERNAME] + ";Password=" + @[User::PASSWORD] +";Initial Catalog=" + @[User::DATABASE] + ";Provider=SQLNCLI11.1;Persist Security Info=True;Auto Translate=False;"