using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SqlServer.Dts.Runtime; using Microsoft.SqlServer.Dts.Pipeline.Wrapper; using System.IO; namespace ETL.SSIS { class ssisReverse { ssisPackage _package; string DirectoryPath = null; String PackageName = null; #region constructor #endregion #region public properties public ssisReverse(String PackageDirectoryPath, String PackageName) { String FullFilePath = PackageDirectoryPath + "\\" + PackageName + ".dtsx"; if (File.Exists(FullFilePath)) { _package = new ssisPackage(PackageDirectoryPath, PackageName); SearchPackage(_package.getExecutables); } else { Console.WriteLine("Error: {0} Package Not found", FullFilePath); } } #endregion #region private sub modules // Search Packge Module to find Components private void SearchPackage (Executables CollExec) { foreach (Executable exc in CollExec) { Sequence sequence = (Sequence)exc; if (sequence != null) { Console.WriteLine("Sequence Container - {0}", sequence.Name); SearchPackage(sequence.Executables); GetEventHandlers(sequence.EventHandlers); continue; } ForEachLoop forEachLoop = (ForEachLoop) exc; if (forEachLoop != null) { Console.WriteLine("For Each Loop - {0}", forEachLoop.Name); SearchPackage(forEachLoop.Executables); GetEventHandlers(forEachLoop.EventHandlers); continue; } ForLoop floop = (ForLoop)exc; if (floop != null) { Console.WriteLine("Sequence Container - {0}", floop.Name); SearchPackage(floop.Executables); GetEventHandlers(floop.EventHandlers); continue; } TaskHost taskHost = (TaskHost)exc; if (taskHost != null) { GetTaskHost(taskHost); GetEventHandlers(taskHost.EventHandlers); continue; } } } // Recursive to find evenths private void GetEventHandlers(DtsEventHandlers colleventh) { foreach (DtsEventHandler eventh in colleventh) { SearchPackage(eventh.Executables); } } // Find dataflows private static void GetTaskHost(TaskHost th) { if (th == null) { return; } Console.WriteLine("TaskHost - {0}", th.Name); //DataFlow MainPipe pipeline = th.InnerObject as MainPipe; if (pipeline != null) { GetPipeline(pipeline); } } //SQL 2005 private static void GetPipeline(MainPipe pipe) { foreach (IDTSComponentMetaData90 componentMetadata in pipe.ComponentMetaDataCollection) { Console.WriteLine("DataFlow Components - {0}", componentMetadata.Name); } } #endregion } }
"I hear and I forget. I see and I remember. I do and I understand."
Confucius
Jorge Novo Development Solutions,Ideas, and Crazy Thoughts.
Email: ETLDEVDBA(at)gmail.com
Tweeter: @ETLDEVDBA
June 07, 2012
SSIS Template Generator and Reverse Engineering Part II
After completing a new schema for my new ssis framework finally is done, now is time to start coding the classes here is the First class to traverse a package enjoy:
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment