【发布时间】:2016-01-13 08:40:22
【问题描述】:
我已经开发了一个 C# 控制台应用程序项目来运行一个 SSIS 包,并且我正在使用 .Net DTS 库来执行:
using Microsoft.SqlServer.Dts.Runtime;
.
.
var app = new Application();
var package = app.LoadPackage(@"ACE.dtsx", null);
package.Execute();
foreach (var error in package.Errors)
{
logger.Error(error.ErrorCode + " " + error.Description);
}
这一切都在 Visual Studio 本地工作,执行包时没有报告任何错误。
但是,当我部署到安装了 SQL Server 配置管理器验证的集成服务以及显示 SQL Server 集成服务的 Windows 服务的服务器时,我收到了不同的错误,具体取决于我是在 x86 还是 x64/Any CPU 平台上部署。
x86
当我将 .Net 库设置为构建为 x86 并进行部署时,出现以下错误:
var app = new Application();
错误:主控制流期间发生错误 Microsoft.SqlServer.Dts.Runtime.DtsComException:找不到集成服务类。确保在运行应用程序的计算机上正确安装了集成服务。此外,如果您正在运行 64 位应用程序,请确保安装了 64 位版本的 Integration Services。 ---> System.Runtime.InteropServices.COMException:检索具有 CLSID {C3EC6BC0-D544-47D5-A0F2-2825E47DBE24} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154( REGDB_E_CLASSNOTREG))。 在 Microsoft.SqlServer.Dts.Runtime.Application..ctor()
这似乎表明它在服务器上找不到集成服务或库。这对我来说很有意义,因为服务器运行的是 64 位 Windows 和 64 位 SQL Server。
x64/任何 CPU
如果我使用 x64 或任何 Cpu 平台进行部署,错误将变为:
错误:主控制流期间发生错误 System.BadImageFormatException:无法加载文件或程序集“Microsoft.SqlServer.DTSRuntimeWrap,版本=12.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或其依赖项之一。试图加载格式不正确的程序。 文件名:'Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
这对我来说没有意义,因为库现在是与服务器匹配的 64 位。
环境
本地:
- Windows 7 x64
- SQL Server 2014 Enterprise Edition 64 位,安装了包括集成在内的所有服务。
- 安装了适用于商业智能的数据工具的 Visual Studio 2013
服务器:
- Windows Server 2012 x64
- 带有集成服务的 SQL Server 2012 x64。我不确定如何查看确切的版本,因为没有本地数据库实例可以运行“SELECT @@Version”。
- 数据库托管在其他地方。此服务器主要用于运行计划任务以在该数据库上执行 SSIS 包。
我打算在本地安装 SQL Server 2012,所以我的版本与服务器匹配,但后来我意识到重要的不是那个版本,而是商业智能的 Visual Studio Data Tools,因为它给了我 .Net 包装类和迄今为止正如我所知道的,我无法选择 VS2013 使用哪个版本。此外,这肯定与旧的 SQL Server 版本兼容。
商业智能数据工具是一个 x86 安装程序,但我被引导相信这纯粹是因为 Visual Studio 作为 x86 运行并且不影响 x64 运行时支持。
如何成功部署?
【问题讨论】:
-
您的包中是否包含任何 32 位对象?也许 Excel 作为数据源?
-
我看不到,但数据流中有很多。有确定的检查方法吗? SSIS 包是前段时间由其他人编写的,所以我只是编写了控制台项目以更改我们执行它的方式。它曾经通过直接调用“C:\Program Files\Microsoft SQL Server\110\DTS\Binn\dtexec.exe”命令在同一台服务器上执行。 Connections Managers 显示了 3 个 ADO.Net 连接和 OLEDB 连接以及一个 SQLTask。
-
您可以检查本地的工作副本是否在 32 位模式下运行。从 Visual Studio Project > Project Name Properties... 这将打开属性对话框。检查调试选项卡上的 Run64BitRuntime 设置。如果设置为 false,您的包需要在 32 位模式下运行。部署包时,此选项卡中的设置不会从 Visual Studio 传输。它们需要在运行时显式设置。
-
@destination-data 该设置为真,因此它应该作为 64 位应用程序进行调试。
标签: .net sql-server ssis business-intelligence