Resources:
Now that we’ve got our package loaded, executing it is pretty straightforward, although there is a more parameterized way to do it:
//using Microsoft.SqlServer.Dts.Runtime; Package pkg; DTSExecResult pkgResults; pkgResults = pkg.Execute();
The DTSExecResult enumerable captures a simple Success/Failure/Canceled status (technically, Completion – Success or Failure – is an enum value, but you won’t see it).
And that’s it!
Let’s put it all together:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Dts.Runtime;
using System.Xml;
namespace SSIS2012.PackageRuntime
{
public class PackageExecution
{
public void ExecutePackage(
string destinationDB,
string destinationServer,
string pkgFolder,
string pkgName
)
{
//run SSIS package:
string pkgLocation = pkgFolder + pkgName + @".dtsx";
Application app = new Application();
Package pkg;
DTSExecResult pkgResults;
MyEventListener eventListener = new MyEventListener();
pkg = app.LoadPackage(pkgLocation, eventListener);
pkgResults = pkg.Execute();
switch (pkgResults)
{
case DTSExecResult.Success:
//do something here:
break;
case DTSExecResult.Failure:
//do something here:
break;
case DTSExecResult.Canceled:
//do something here:
break;
case DTSExecResult.Completion:
//do something here:
break;
default:
break;
}
}
}
class MyEventListener : DefaultEvents
{
public DtsObject ErrorSource;
public string ErrorSubcomponent;
public string ErrorDescription;
public int ErrorCode;
public override bool OnError(
DtsObject source,
int errorCode,
string subComponent,
string description,
string helpFile,
int helpContext,
string idofInterfaceWithError)
{
ErrorSource = source;
ErrorSubcomponent = subComponent;
ErrorDescription = description;
ErrorCode = errorCode;
//Console.WriteLine("Error in {0}/{1} : {2}", source, subComponent, description);
return false;
}
}
}