我有一个.Net应用程序(VS2017 4.6),该应用程序使用here.中所述的方法使用SSIS包中的数据。这些包是使用VS2012的SQL数据工具开发的(因此目标是SQL Server 2012)。这个想法是程序调用包执行,并等待返回DataReader结果以进行处理。 这在Dev机器上正常工作(一如既往)。
我正在尝试将该解决方案部署到同时存在SQL Server 2008、2012和2014的服务器计算机上,但是它不起作用,返回错误为“包无法加载”。
我修改了软件和软件包,使其包含一个Logging组件,该组件给出了更详细的报告。实际错误是这样的:要在SQL Server数据工具之外运行SSIS包,必须安装Integration Services的 myDataReaderName 或更高版本。
尽管所有实例似乎都具有某些DTS组件(它们的DTS \ Binn文件夹存在并且具有DTExec.exe文件),但是根据SQL Server 2014安装的组件报告,只有2014实例实际上具有已安装Integration Services。我猜其他实例由于导入/导出组件而具有文件吗?
我尝试使用DTExec / DTExecui实用程序对所有实例执行该程序包,实际上,只有2014实例成功执行了该程序包。 2012实例(与开发计算机的版本完全相同)返回相同的要在SQL Server数据工具之外运行SSIS包,则必须安装Integration Services的 myDataReaderName 或更高版本。错误。
因此,我尝试更改Path环境变量并重命名除2014版本以外的所有DTExec.exe文件,以强制DtsClient组件使用“正确”版本,但无济于事。
那么,我做错了什么?我认为针对2012的SSIS包可以在2014年前运行。它实际上可以与DTExec实用工具中的2014实例一起运行,但不能从我的应用程序内部运行,因此对我来说.Net包装器似乎“混乱”并选择2012年实例。我在这里有什么选择?