Załadowanie i uruchomienie paczki SSIS z poziomu aplikacji .NET

2012-07-07

W dzisiejszym temacie przedstawię przykładowy kod C# umożliwiający załadowanie i uruchomienie paczki Integration Services. Na początku w projekcie konieczne jest dodanie referencji do Microsoft.SQLServer.ManagedDTS.dll. Wszystkie użyte klasy znajdują się w przestrzeni Microsoft.SqlServer.Dts.Runtime. Poniższy kod za pomocą obiektu klasy Application i metody LoadPackage ładuje paczkę z określonej lokalizacji, następnie dla wczytanej paczki (klasa Package) importowany jest plik konfiguracyjny (metoda ImportConfigurationFile) oraz ustawiana wartość zmiennej Id (właściwość Variables), na koniec paczka jest uruchamiana za pomocą metody Execute. W wyniku tej metody otrzymujemy obiekt DTSExecResult informujący o statusie zakończenia operacji.

public void ExecSSISPackage()
{
    Microsoft.SqlServer.Dts.Runtime.Application SSISApplication =
        new Microsoft.SqlServer.Dts.Runtime.Application();

    Package SSISPackage = SSISApplication.LoadPackage(@"D:\LoadData.dtsx", null);

    /*
    Załadowanie paczki z serwera:

    if (SSISApplication.ExistsOnSqlServer("packagePath", "serverName",
        "serverUserName", "serverPassword"))
        SSISPackage = SSISApplication.LoadFromSqlServer("packagePath",
            "serverName", "serverUserName", "serverPassword", null);
    */

    SSISPackage.ImportConfigurationFile(@"D:\LoadData.dtsConfig");
    SSISPackage.Variables["Id"].Value = 1;

    DTSExecResult ExecResult = SSISPackage.Execute();
}

W zakomentowanym fragmencie kodu znajduje się przykład załadowania paczki z serwera SQL.

Poniżej znajduje się kod rozszerzający wcześniejszy przykład o możliwość przechwytywania zdarzeń występujących podczas wykonywania paczki. Do tego celu należy stworzyć oddzielną klasę dziedziczącą po DefaultEvents. Klasa ta ma na celu obsłużenie każdego zdarzenia, które chcemy przechwycić. Utworzony obiekt tej klasy przekazywany jest do metody Execute wczytanej paczki.

class PackageEvents : DefaultEvents
{
    public override bool OnError(DtsObject source, int errorCode, string subComponent,
      string description, string helpFile, int helpContext, string idofInterfaceWithError)
    {
        MessageBox.Show("Wystąpił błąd w " + source + ", " +
            subComponent + ": " + description);
        return false;
    }
}

public void ExecSSISPackageWithEvents()
{
    Microsoft.SqlServer.Dts.Runtime.Application SSISApplication =
        new Microsoft.SqlServer.Dts.Runtime.Application();

    Package SSISPackage = SSISApplication.LoadPackage(@"D:\LoadData.dtsx", null);

    SSISPackage.ImportConfigurationFile(@"D:\LoadData.dtsConfig");
    SSISPackage.Variables["Id"].Value = 1;

    PackageEvents SSISEvents = new PackageEvents();

    DTSExecResult ExecResult = SSISPackage.Execute(null, null, SSISEvents, null, null);
}

Aby możliwe było skorzystanie z opisanych mechanizmów, na danym komputerze musi być zainstalowany Integration Services. Sposób na uruchomienie paczki SSIS z komputera nie posiadającego tego narzędzia opisany jest na MSDN.

Więcej informacji na ten temat: MSDN.

Reklamy

Posted on 2012-07-07, in .NET/C# and tagged , , , , . Bookmark the permalink. Dodaj komentarz.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: