事前にCOMの「Microsoft DTSPackage Object Library」みたいなのを参照設定しておきます。
たぶんEnterprise Managerかなんかがローカルにインストールされてある必要があるんじゃないかと思います。
で、こんな感じのコードで情報が取得できます。
using System; using System.Collections.Generic; using System.Text; using DTS; class DtsAgent { //DTSのPackage情報を自作のDTOオブジェクトに詰めて返却するメソッド //注) DtsTaskが自作のDTOクラス。 internal IList<DtsTask> GetTasks() { Application oDTSApp = new Application(); //このプログラムではSettingsファイルにDBの接続情報を保存している PackageSQLServer oPkgSQLServer = oDTSApp.GetPackageSQLServer( Settings.Default.DBServer, Settings.Default.DBUser, Settings.Default.DBPassword, DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection); PackageInfos oPkgInfos = oPkgSQLServer.EnumPackageInfos("", true, ""); PackageInfo oPkgInfo = oPkgInfos.Next(); IList<DtsTask> tasks = new List<DtsTask>(); while (!oPkgInfos.EOF) { Package2 oPkg = new Package2(); object pVarPersistStgOfHost = new object(); oPkg.LoadFromSQLServer( Settings.Default.DBServer, Settings.Default.DBUser, Settings.Default.DBPassword, DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection, "", "", "", oPkgInfo.Name, ref pVarPersistStgOfHost); //IDをキーにしてConection情報をDictionaryに保存する IDictionary<int, Connection> connections = new Dictionary<int, Connection>(); int connectionCount = oPkg.Connections.Count; for (int connKey = 1; connKey <= connectionCount; connKey++) { Connection oConnection = oPkg.Connections.Item(connKey); connections.Add(oConnection.ID, oConnection); } int taskCount = oPkg.Tasks.Count; for (int taskKey = 1; taskKey <= taskCount; taskKey++) { Task oTask = oPkg.Tasks.Item(taskKey); //ここではPumpTaskだけを取得対象とする if (oTask.CustomTaskID == "DTSDataPumpTask") { DtsTask dtsTask = new DtsTask(); tasks.Add(dtsTask); dtsTask.PackageName = oPkgInfo.Name; dtsTask.TaskName = oTask.Name; IDictionary<string, string> taskProps = ToDictionary(oTask.Properties); //Connection情報をさっき作成したDictionaryから取得する int connKey = int.Parse(taskProps["SourceConnectionID"]); dtsTask.SourceMdbPath = connections[connKey].DataSource; dtsTask.SourceQuery = taskProps["SourceSQLStatement"]; dtsTask.SourceObjectName = taskProps["SourceObjectName"]; dtsTask.DestinationObject = taskProps["DestinationObjectName"]; dtsTask.DestinationQuery = taskProps["DestinationSQLStatement"]; } } oPkg.UnInitialize(); oPkgInfo = oPkgInfos.Next(); } return tasks; } //PropertiesプロパティをDictionaryに変換して扱いやすくするメソッド IDictionary<string, string> ToDictionary(Properties props) { int count = props.Count; IDictionary<string, string> ret = new Dictionary<string, string>(); for (int i = 1; i <= count; i++) { Property prop = props.Item(i); if (prop.Value == null) { ret.Add(prop.Name, null); } else { ret.Add(prop.Name, prop.Value.ToString()); } } return ret; } }