You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019下用C#执行SSIS .dtsx包遇故障求助

针对SQL Server 2019用C#程序化执行SSIS包的问题解答

1. SQL Server 2019执行SSIS包是否需要额外DLL?

是的,除了你已引用的Microsoft.SQLServer.DTSPipelineWrap.dll、Microsoft.SqlServer.DTSRuntimeWrap.dll、Microsoft.SqlServer.ManagedDTS.dll、Microsoft.SQLServer.PipelineHost.dll,还需要以下关键依赖:

  • Microsoft.SqlServer.DTSPipeline.dll:这个DLL在GAC中存在,是SSIS数据管道的核心依赖,运行时必须能被加载,即使你不直接在项目中引用,也需要确保它在GAC或应用程序可访问路径中。
  • 非托管底层DLL:比如dtspipeline.dll、dtsruntime.dll等,这些位于C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn目录下,运行时需要该目录在系统PATH中,或者你的应用程序工作目录指向此处。
  • 注意:SSIS 2019依赖一套完整的运行时组件,仅手动引用几个DLL容易遗漏底层依赖,这也是你运行时失败的常见原因。

2. 是否应引入Microsoft.SqlServer.Management.IntegrationServices.dll?

取决于你的执行方式:

  • 如果是直接加载本地.dtsx文件执行:不需要这个DLL,核心依赖是Microsoft.SqlServer.ManagedDTS.dll。
  • 如果是通过SSIS目录(SSISDB)执行已部署的包:必须引入这个DLL,它提供了与SSISDB交互的API,用于启动包执行、监控状态、获取日志等管理操作。

3. 针对SQL Server 2019用C#执行SSIS包的官方推荐方案

官方更推荐两种标准化方案,而非手动打包自定义NuGet包:

方案一:使用官方NuGet包直接加载本地包

使用官方发布的Microsoft.SqlServer.ManagedDTS NuGet包(版本选择15.x系列,对应SQL Server 2019),无需手动复制DLL。示例代码:

using Microsoft.SqlServer.Dts.Runtime;

var packagePath = @"C:\YourPackage.dtsx";
var app = new Application();
Package package = app.LoadPackage(packagePath, null);

// 设置包参数(如果需要)
package.Variables["YourVariable"].Value = "YourValue";

// 执行包
DTSExecResult result = package.Execute();

// 检查执行结果
if (result == DTSExecResult.Success)
{
    Console.WriteLine("包执行成功");
}
else
{
    Console.WriteLine($"包执行失败,结果:{result}");
}

方案二:通过SSISDB执行已部署的包

如果你的包已部署到SQL Server 2019的SSIS目录,使用Microsoft.SqlServer.Management.IntegrationServices NuGet包(同样选15.x版本)来调用:

using Microsoft.SqlServer.Management.IntegrationServices;
using System.Data.SqlClient;

var connectionString = "Data Source=YourSQLServer;Initial Catalog=master;Integrated Security=SSPI;";
var ssisServer = new IntegrationServices(new SqlConnection(connectionString));
var catalog = ssisServer.Catalogs["SSISDB"];
var folder = catalog.Folders["YourFolder"];
var project = folder.Projects["YourProject"];
var package = project.Packages["YourPackage.dtsx"];

// 启动包执行
var execution = package.Execute(false, null);

// 监控执行状态
while (execution.Status != Microsoft.SqlServer.Management.IntegrationServices.ExecutionStatus.Success && 
       execution.Status != Microsoft.SqlServer.Management.IntegrationServices.ExecutionStatus.Failed)
{
    System.Threading.Thread.Sleep(1000);
    execution.Refresh();
}

Console.WriteLine($"包执行状态:{execution.Status}");

备选方案:调用dtexec.exe命令行

如果以上API方式遇到兼容性问题,可以在C#中启动进程调用dtexec.exe(位于C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn),示例:

var process = new System.Diagnostics.Process();
process.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\dtexec.exe";
process.StartInfo.Arguments = @"/F ""C:\YourPackage.dtsx"" /SET \Package.Variables[YourVariable].Value;""YourValue""";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();

string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();

Console.WriteLine($"执行输出:{output}");
Console.WriteLine($"退出码:{process.ExitCode}");

4. 如何确保引用DLL与2019兼容?

  • 优先使用官方NuGet包:选择15.x版本的Microsoft.SqlServer.ManagedDTS和Microsoft.SqlServer.Management.IntegrationServices,官方包会自动处理依赖和版本匹配,避免手动打包的问题。
  • 匹配DLL版本来源:如果必须手动引用DLL,务必从SQL Server 2019对应的目录获取:
    • 32位:C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn
    • 64位:C:\Program Files\Microsoft SQL Server\150\DTS\Binn
  • 对齐目标平台:将C#项目的目标平台设置为x64(如果你的SSIS包是64位运行),避免32/64位不兼容导致的加载失败。
  • 确认运行时环境:确保执行C#应用的机器上安装了SQL Server 2019 Integration Services Runtime(即使未安装SQL Server数据库引擎,也需要单独安装SSIS运行时)。
  • 检查版本一致性:所有SSIS相关DLL的版本号必须为15.x(比如15.0.2000.5),GAC中的DLL版本也要与引用的版本一致,强命名DLL的版本不匹配会导致运行时加载失败。

额外排查建议

运行时失败的具体错误信息是关键,建议捕获并查看异常详情:

  • 捕获DtsException,查看内部异常和错误代码。
  • 检查Windows事件日志中的应用程序日志,可能会有SSIS运行时的详细错误记录。
  • 确认SSIS包本身已升级到2019格式:打开SQL Server Data Tools(SSDT)2019,加载包后重新保存,确保包版本与SQL Server 2019兼容。

内容的提问来源于stack exchange,提问作者KA-Yasso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:55:06