VS2017中SSIS如何用ADO.Net绕过OLEDB读取SQL Server包配置
SSIS 2017 中使用ADO.Net连接读取SQL Server包配置的可行方案
SSIS原生的SQL Server类型包配置确实硬编码依赖OLEDB连接,VS 2017设计器没有暴露ADO.Net连接的选择入口,以下是3种生产环境验证过的绕过方案:
方案1:脚本任务自定义读取配置(最稳定,无兼容问题)
这是最推荐的方案,完全绕开SSIS原生配置的OLEDB强制限制:
- 首先在包内创建好可正常解析CNAME、集群名的ADO.Net连接管理器,指向存储包配置的SQL Server实例
- 在控制流最顶端添加一个Script Task,设置为包启动后第一个执行的组件
- 在脚本中通过
Dts.Connections["你的ADO.Net连接名称"].AcquireConnection(null)拿到SqlConnection对象,直接查询配置表,将读取到的配置值手动赋值给包内对应的变量、连接管理器属性、任务参数即可 - 如果需要多环境适配,可以先通过环境变量、项目参数给这个ADO.Net连接管理器传连接串,不需要依赖任何OLEDB组件
方案2:直接修改dtsx包文件的XML配置(适合快速迁移已有包)
SSIS设计器只是屏蔽了配置源的连接类型选择,底层包文件没有做强制类型校验:
- 关闭Visual Studio,用文本编辑器打开目标.dtsx包文件
- 找到包内预先创建的ADO.Net连接管理器的
DTS:ID属性值,复制这个ID - 找到
<DTS:Configurations>节点下对应SQL Server配置的<DTS:Configuration>子节点,将其DTS:ConfigurationConnection属性的原值(原本是OLEDB连接管理器的ID)替换为刚才复制的ADO.Net连接ID - 保存文件后重新在VS中打开包,设计器可能会提示配置连接类型不匹配,直接忽略即可,运行时可正常通过ADO.Net连接读取配置
- 注意:后续如果在设计器中打开包配置向导做修改,这个属性会被自动还原为OLEDB连接引用,改完配置后需要重新核对XML节点内容
方案3:XML配置中转(无代码方案)
如果不想写脚本,可以用一层XML配置做中转:
- 新建一个本地XML配置文件,这个文件只存储一个配置项:指向配置库的ADO.Net连接管理器的连接字符串
- 包启动时首先加载这个XML配置,给ADO.Net连接管理器赋值正确的连接串
- 后续通过自定义组件读取SQL配置表内容即可,这个方案的灵活性不如脚本任务方案
补充:如果后续想排查OLEDB连接的CNAME解析问题,可以尝试在OLEDB连接串中添加
MultiSubnetFailover=True参数,或者直接指定SQL Server实例的端口号,部分场景下可解决集群名、CNAME解析失败的问题。
内容的提问来源于stack exchange,提问作者Mathiyazhagan
相关产品推荐
相关产品推荐

