SSIS DataReader Destination – odczyt danych w aplikacji .NET

2012-07-13

W ostatnim wpisie pokazałem w jaki sposób wczytać i uruchomić paczkę Integration Services w aplikacji .NET. Dzisiaj rozszerzę ten temat, prezentując kod C# pozwalający na pobranie danych z paczki SSIS zawierającej komponent DataReader Destination. Komponent ten poprzez interfejs DataReader udostępnia aplikacjom zewnętrznym zestaw danych z elementu DataFlow. Przed próbą odczytu danych w aplikacji zewnętrznej konieczne jest odpowiednie skonfigurowanie obiektów paczki SSIS. W komponencie DataReader Destination oprócz zdefiniowania listy kolumn należy ustawić trzy podstawowe właściwości:

  • Name – nazwa, po której aplikacja zewnętrzna będzie się odwoływać do komponentu;
  • ReadTimeout – czas w milisekundach, przez jaki dane są udostępniane;
  • FailOnTimeout – zachowanie po upływie wyznaczonego czasu na odczyt, w przypadku False dane po prostu przestają być udostępniane, w przypadku True zgłaszany jest wyjątek: „The SSIS IDataReader is closed. The read timeout has expired”;

Drugą ważną rzeczą jest definicja zmiennych. Jeżeli wartość danej zmiennej ma być ustawiana z poziomu aplikacji zewnętrznej, zmienna taka musi znajdować się w przestrzeni DtsClient. Oto prosty obiekt DataFlow, z którego pobierane będą dane:

Teraz możemy przejść do kodu C# odczytującego dane z paczki SSIS. Na początku w projekcie należy dodać referencje do Microsoft.SqlServer.Dts.DtsClient.dll (domyślna lokalizacja pliku w przypadku SQL Server 2012 to C:\Program Files\Microsoft SQL Server\110\DTS\Binn). Wszystkie niezbędne klasy znajdują się w przestrzeni Microsoft.SqlServer.Dts.DtsClient. Pierwszym krokiem jest utworzenie obiektu DtsConnection oraz wskazanie we właściwości ConnectionString lokalizacji paczki SSIS. Następnie tworzony jest obiekt DtsCommand z właściwością CommandText zawierającą nazwę komponentu DataReader Destination, z którego pobierane będą dane. Kolejnym etapem jest utworzenie i skonfigurowanie obiektu DtsDataParameter odpowiedzialnego za przypisanie wartości do zmiennej Id. Ostatnim krokiem jest wywołanie metody DtsCommand.ExecuteReader, w wyniku której otrzymujemy obiekt IDataReader udostępniający dane z paczki SSIS. W poniższym przykładzie odczytane dane umieszczane są w obiekcie DataTable.

public void SSISDataReader()
{
    DtsConnection SSISConnection = new DtsConnection();
    SSISConnection.ConnectionString = @"/FILE ""D:\DataReader.dtsx""";
    SSISConnection.Open();

    DtsCommand SSISCommand = new DtsCommand(SSISConnection);
    SSISCommand.CommandText = "DataReaderDest";

    DtsDataParameter SSISParameter = new DtsDataParameter("Id", DbType.Int32);
    SSISParameter.Direction = ParameterDirection.Input;
    SSISCommand.Parameters.Add(SSISParameter);
    SSISParameter.Value = 1;

    IDataReader dataReader = SSISCommand.ExecuteReader(CommandBehavior.CloseConnection);

    DataTable dataTable = new DataTable();
    dataTable.Load(dataReader);

    SSISCommand.Dispose();
    dataReader.Close();
}

Jeżeli uruchamiana paczka posiada plik konfiguracyjny możemy wskazać do niego ścieżkę poprzez parametr /ConfigFile w DtsConnection.ConnectionString. Opis pozostałych opcji: dtexec Utility.

Więcej informacji na ten temat: MSDN.

Reklamy

Posted on 2012-07-13, 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. Log Out / Zmień )

Zdjęcie z Twittera

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d blogerów lubi to: