首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 程式化執行 SSIS 套件的三種部署方式完整指南

     編輯:關於C#

SQL Server Integration Services (SSIS) 套件通常透過 SQL Agent 作業排程執行,但有時需在 C# 程式中動態載入並執行套件(例如依參數決定執行哪個套件)。SSIS 套件有三種部署模式:檔案系統、SSIS 目錄 (SSISDB)、資料庫 (msdb)。本文針對前兩種提供完整 C# 程式碼範例。

前置準備

專案需參考以下組件(通常位於 C:\Program Files\Microsoft SQL Server\<版本>\SDK\Assemblies):

  • Microsoft.SqlServer.ManagedDTS.dll
  • Microsoft.SqlServer.DTSRuntimeWrap.dll

引用命名空間:

using DTS = Microsoft.SqlServer.Dts.Runtime;
using System.Collections.Generic;

1. 檔案系統部署

直接載入 .dtsx 檔案,設定變數值後執行:

string pkgPath = @"C:\Packages\MyPackage.dtsx";

var app = new DTS.Application();
DTS.Package pkg = app.LoadPackage(pkgPath, null);

// 設定套件變數
pkg.Variables["FirstVar"].Value = "12345321";
pkg.Variables["SecondVar"].Value = "2312";

// 執行並取得結果
DTS.DTSExecResult result = pkg.Execute();

if (result == DTS.DTSExecResult.Success)
{
    Console.WriteLine("套件執行成功");
}
else
{
    Console.WriteLine("套件執行失敗");
    // 可遍歷 pkg.Errors 收集錯誤細節
}

2. SSIS 目錄部署 (SSISDB)

適用於 SQL Server 2012+ 專案部署模型,需連線至 SSISDB 目錄:

string ssisServer = "."; // 本機預設執行個體
string folderName = "MyProjectFolder";
string projectName = "MyProject";
string packageName = "MyPackage.dtsx";

var app = new DTS.Application();

// 1. 確認資料夾是否存在
bool folderExists = app.FolderExistsOnSqlServer(folderName, ssisServer, null, null);
Console.WriteLine($"資料夾存在: {folderExists}");

// 2. 從 SSISDB 載入套件
DTS.Package pkg = app.LoadFromSqlServer(packageName, ssisServer, folderName, projectName, null);

// 3. 設定參數 (SSISDB 使用 Parameters 而非 Variables)
pkg.Parameters["OpeId"].Value = "value from c#";

// 4. 執行 (需建立 ExecutionInstance)
long executionId = pkg.Execute(true, null, null); // 同步執行並取得執行 ID

// 5. 可選:移除資料夾 (示範用)
app.RemoveFolderFromSqlServer(folderName, ssisServer, null, null);

3. 資料庫部署 (msdb) - 遺留模式

舊版相容模式,將套件儲存於 msdb.dbo.sysssispackages。操作方式類似檔案系統,但載入方法改用 LoadFromSqlServer 並指定伺服器名稱與套件路徑。因現代專案多改用 SSISDB,此處不贅述。

常見問題與最佳實務

  • 32/64 位元相容:若套件使用 32 位元提供者(如 Excel、Access),C# 專案必須設定 Prefer 32-bit 或明確編譯為 x86。
  • 連線字串參數化:避免硬編碼連線字串,改用套件參數/變數,執行時由外部注入。
  • 錯誤處理:執行後檢查 pkg.Errors 集合,記錄詳細錯誤訊息以利除錯。
  • 非同步執行:長時間執行的套件建議使用 Execute 多載搭配事件處理器 (Package.Executing, Package.Completed) 實作非同步監控。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved