我用谷歌搜索了很多,并反复偶然发现一些让我感觉的文章——这行不通!
在脚本组件中编写托管代码时,不能调用返回非托管对象的连接管理器的 AcquireConnection 方法,例如 OLE DB 连接管理器和 Excel 连接管理器。但是,您可以读取这些连接管理器的 ConnectionString 属性,并使用 System.Data.OleDb 命名空间中的 OLEDB 连接的连接字符串直接在代码中连接到数据源。
而且我相信,如果我不能调用 Acquire Connection,那么我就不能参与组件容器在 SSIS 包中启动的事务。
我现有的 SSIS 包使用 OLEDB 连接管理器(本机),我的自定义组件将使用相同的连接管理器。目前,我正在使用连接字符串而不调用 Acquire Connection - 在这种方法中,由于我正在创建一个新连接,因此组件无法参与父 SSIS 序列容器可能已经启动的任何事务,而这反过来又不会如果下游发生故障,导致自定义组件所做的更改回滚。由于巨大的影响,将现有的连接管理器更改为 ADO.NET 看起来并不可行,因为现有的 OleDb 连接管理器用于许多 OleDb 组件,如现有代码中的 OleDb 目标。
有什么办法可以解决这个问题 - 所以基本上我想让事务在自定义组件中使用 OleDb 连接管理器工作?