我正在建立一个新的数据仓库(服务器1),需要从同一服务器(服务器2)上的3个不同数据库中获取数据。一切正常,直到我尝试使连接动态化。
我创建了一个包含4个变量的Foreach循环容器FLC
在FLC中,我添加了数据流任务DFT,并在DFT中添加了OLE DB源
在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)
答案 0 :(得分:0)
首先,您使用的是不足的以下提供程序:
用于ODBC驱动程序的Microsoft OLE DB提供程序
相反,请在连接管理器中选择SQL Server Native Client 11
。
下一步是将“数据流任务”和OLEDB源Delay Validation
属性更改为True
,因为如果变量的默认值为空,则会在程序包验证阶段引发错误(一旦执行)
使用连接字符串表达式代替将表达式分配给多个连接管理器属性:
"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;"