从ASP.NET执行SSIS包报错:SQL Server 2017升级后连接异常
解决ASP.NET调用升级后SSIS包的运行报错问题
问题背景
你在将客户端SQL Server从2008 R2升级至2017后,遇到了SSIS包调用的棘手问题:
- 已在SSDT 2017中打开包解决方案并完成版本升级
- 把连接字符串里的原生客户端OLEDB提供器改成了
SQLNCLI11.1 - 在应用的
web.config中添加了2017版本的SSIS程序集引用
但调用时还是弹出报错:
Failure To run a SSIS package outside of SQL Server Data Tools you must install Standard Edition of Integration Services or higher
针对性解决方案
1. 优先确认SSIS运行时组件是否安装
这个报错的核心原因几乎都是目标机器没有安装对应版本的SSIS运行环境。SQL Server 2017的SSIS是独立组件,不会随数据库引擎默认安装,你需要:
- 启动SQL Server 2017安装介质,选择「新增安装」
- 在功能选择页面,勾选「Integration Services」,并且必须选择Standard版或更高(Express版不支持外部执行SSIS包)
- 安装完成后重启服务器,确保「SQL Server Integration Services 14.0」服务处于运行状态
2. 验证程序集引用与实际安装版本匹配
虽然你已经添加了版本14.0的程序集,但要再检查几点:
- 服务器上是否安装了「Microsoft SQL Server Integration Services Managed Objects」(SSIS管理对象包)
web.config里的程序集版本14.0.0.0是否和实际安装的SSIS版本完全一致(2017对应版本号是14.0.x.x)- 应用程序池使用的.NET框架版本是否兼容,建议用.NET Framework 4.6及以上
3. 检查ASP.NET调用代码的运行时配置
如果是通过代码直接调用SSIS包,要确保使用的是2017版本的API。比如用Microsoft.SqlServer.ManagedDTS.Application加载包时,代码示例如下:
using Microsoft.SqlServer.Dts.Runtime; var ssisApp = new Application(); Package targetPackage = ssisApp.LoadPackage(@"C:\YourPackagePath.dtsx", null); DTSExecResult execResult = targetPackage.Execute();
同时,要保证运行ASP.NET应用的账户(一般是应用池账户)拥有:
- SSIS包所在目录的读取权限
- 目标SQL Server数据库的连接权限
- SSIS运行时的操作权限
4. 确认连接字符串格式正确性
你已经修改了OLEDB提供器,再确认下连接字符串格式是否规范:
- Windows身份验证格式:
Provider=SQLNCLI11.1;Data Source=你的服务器名;Initial Catalog=你的数据库名;Integrated Security=SSPI;
- SQL身份验证格式:
Provider=SQLNCLI11.1;Data Source=你的服务器名;Initial Catalog=你的数据库名;User ID=你的账号;Password=你的密码;
5. 脱离ASP.NET环境测试SSIS包
先绕过应用,直接用服务器上的dtexec.exe工具运行SSIS包,验证包本身是否能正常执行:
dtexec /F "C:\你的包路径.dtsx" /Conn "你的连接名";"Provider=SQLNCLI11.1;Data Source=你的服务器;Initial Catalog=你的数据库;Integrated Security=SSPI;"
如果这个命令能成功运行,说明包本身没问题,问题出在ASP.NET应用的调用配置上;如果失败,根据dtexec的错误提示进一步排查包的内部配置。
内容的提问来源于stack exchange,提问作者Akilan Deivasikamani
相关产品推荐
相关产品推荐

