SSIS - 使用 C# 呼叫 SSIS Package 的三種方式

摘要:SSIS - 使用 C# 呼叫 SSIS Package 的三種方式

這陣子忽然間想來讀讀 SSIS 這門技術,在 SQL 2005 時我來不及參與,只好在 SQL 2008 的時候進門學習,當然少不了要買本胡百敬老師的書來加快入門的速度。在書中的第二章就用SSIS產生一個文字檔,但心急的我就開始想,在 C# 中應該怎麼去呼叫使用呢!? 以下就來用範列來做說明

環境:
1.SQL SERVER 2008
2.SSIS
3.資料庫:AdventureWorks
4.完成使用 SSIS 將資料表資料匯出文字檔的Package
5.建立一個 WinForm 的專案

情境一:使用 LoadPackage 來呼叫 Package

Code:
private void btnExec_Click(object sender, EventArgs e)
{
 Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
 Package package = null;           
 
 try
 {
  //指定絕對路徑給 LoadPackage
  package = app.LoadPackage(@"D:\My Project\Pro_SSIS_Sample_1\Pro_SSIS_Sample_1\Package.dtsx", null);
  Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();
  MessageBox.Show("執行 SSIS 狀態:" + results.ToString());
 }
 catch (Exception ex)
 {
  throw ex;
 }
 finally
 {
  package.Dispose();
  package = null;
 }
}

情境二:使用 LoadFromDtsServer 來呼叫 Package

步驟一:開啟 SSIS 後,選擇「存放的封裝\File System」,並且新增一個名為「MySSIS」的資料夾




步驟二:匯入 dtsx





步驟三:撰寫程式碼

Code:

private void btnExec_Click(object sender, EventArgs e)
{
 Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
 Package package = null;           
 
 try
 {
  package = app.LoadFromDtsServer("File System\\MySSIS\\MySSIS_01", "HP-PC", null);
  Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();
  MessageBox.Show("執行 SSIS 狀態:" + results.ToString());
 }
 catch (Exception ex)
 {
  throw ex;
 }
 finally
 {
  package.Dispose();
  package = null;
 }
}

情境三:使用 LoadFromSqlServer 來呼叫 Package

步驟一:開啟 SSIS 後,選擇「存放的封裝\MSDB」,並且對「Data Collector」按右鍵選「匯入封裝」




步驟二:撰寫程式碼

Code:

private void btnExec_Click(object sender, EventArgs e)
{
 Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
 Package package = null;           
 
 try
 {
  package = app.LoadFromSqlServer(@"\Data Collector\MySSIS_01", "HP-PC\\DANNYDB", "sa", "pass@word1", null);
  Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();
  MessageBox.Show("執行 SSIS 狀態:" + results.ToString());
 }
 catch (Exception ex)
 {
  throw ex;
 }
 finally
 {
  package.Dispose();
  package = null;
 }
}

參考:
c#執行SSIS包的方法2
Avviare un package di SSIS da un'applicazione ASP.NET
DbConnectionStringBuilder Class