SQL Server 的資料轉換服務(DTS)提供圖形化介面與程式化控制,適合將 Excel 資料批次匯入資料庫。本文記錄建立 DTS 套件流程、C# 呼叫執行方式,以及實務中常見的三大問題與解決方案。
private void RunDTS()
{
DTS.Package2Class package = new Package2Class();
object p = null;
// 從 SQL Server 載入套件(Windows 驗證)
package.LoadFromSQLServer("ws-victor-03", null, null,
DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection,
null, null, null, "TestDTS", ref p);
// 動態指定 Excel 檔案路徑
package.Connections.Item(1).DataSource = @"dts.XLS";
package.Execute();
}
在「資料轉換任務」的屬性 → 「轉換」頁籤中撰寫 ActiveX Script (JScript/VBScript) 進行欄位映射與計算:
DTSDestination("ICC") = DTSSource("SIM Number");
DTSDestination("IMSI") = DTSSource("IMSI");
// ... 其他欄位對應 ...
// 使用全域變數
DTSDestination("MailFormID") = DTSGlobalVariables("MailFromID").Value;
// 產生目前日期字串
DTSDestination("ReceiveDate") = new Date().getYear() + "-" +
(new Date().getMonth()+1) + "-" + new Date().getDate();
return DTSTransformStat_OK;
C# 端設定全域變數:
foreach (GlobalVariable gv in package.GlobalVariables)
{
if (gv.Name == "MailFromID") package.GlobalVariables.Remove(gv.Name);
}
package.GlobalVariables.AddGlobalVariable("MailFromID", MailFromID);
根因為 Excel 欄位格式為「一般」或「文字」,DTS 推斷型別錯誤。解決方式:
DT_STR 或 DT_WSTR。CStr() / FormatNumber() 強制轉為字串再由 SQL 端轉型。在 DTS 套件中新增「執行 SQL 任務」:
SELECT AddressList.* FROM AddressList WHERE (ID = ?)
設定「輸入參數」綁定來源欄位,「輸出參數」對應目的地欄位,即可在資料流中即時查詢並帶入。
DTS 雖屬舊技術(已被 SSIS 取代),但在 SQL Server 2000/2005 環境或維護舊系統時仍具實用價值。掌握「動態連線字串」、「全域變數傳遞」、「ActiveX Script 欄位轉換」與「SQL 任務參數化」四大核心技巧,即能靈活處理多數匯入情境。