Opis Script Component Object Model

Jak wspomniano w części Kodowanie i debugowanie składnika skryptów, projekt składnika skrypt zawiera trzy elementy projektu:

  1. ScriptMain Element, który zawiera ScriptMain klasy, w którym pisania kodu.ScriptMain Klasa dziedziczy z UserComponent klasy

  2. ComponentWrapper Element, który zawiera UserComponent klasy, wystąpienie ScriptComponent zawiera metody i właściwości, które będą używane do przetwarzania danych i interakcję z pakiet.ComponentWrapper Również zawiera element Connections i Variables klasy kolekcja.

  3. BufferWrapper Element, który zawiera które dziedziczy z klasy ScriptBuffer dla każdego wejścia i wyjścia i wpisany właściwości dla każdej kolumna.

Podczas pisania kodu ScriptMain element, będą używać obiektów, metod i właściwości omówionych w tym temacie.Każdy składnik nie będzie używać metody wymienione w tym miejscu; jednak używany, są one używane w sekwencji pokazane.

ScriptComponent Klasa bazowa nie zawiera implementacji kodu dla metod omówionych w tym temacie.Dlatego jest zbędne, ale nieszkodliwe, aby dodać wywołanie implementacji klasy podstawowej do implementacji metoda.

Aby uzyskać informacje dotyczące korzystania z metody i właściwości tych klas w określonego typu składnik skryptów, zobacz sekcję Dodatkowe przykłady składników skryptów.Przykład tematy zawierają również przykłady kodu zakończone.

Metoda AcquireConnections

źródło i miejsca docelowe ogólnie należy połączyć z zewnętrznym źródłem danych.Zastąpić AcquireConnections metoda ScriptComponent Klasa pobrać połączenia lub informacje o połączeniu z odpowiedniego podstawowa menedżer połączeń.

Poniższy przykład zwraca System.Data.SqlClient.SqlConnection z obiektów ADO.NET menedżer połączeń.

    Dim connMgr As IDTSConnectionManager100
    Dim sqlConn As SqlConnection

    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

        connMgr = Me.Connections.MyADONETConnection
        sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)

    End Sub

W poniższym przykładzie zwraca pełną ścieżka i nazwę pliku z płaskim pliku Menedżera połączeń i otwarcie pliku za pomocą System.IO.StreamReader.

    Private textReader As StreamReader
    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)

        Dim connMgr As IDTSConnectionManager100 = _
            Me.Connections.MyFlatFileSrcConnectionManager
        Dim exportedAddressFile As String = _
            CType(connMgr.AcquireConnection(Nothing), String)
        textReader = New StreamReader(exportedAddressFile)

    End Sub

Metoda preExecute

Zastąpić PreExecute metoda ScriptComponent klasy bazowej zawsze używać przetwarzania, które należy wykonać jedno czas tylko przed rozpoczęciem przetwarzania wierszy danych.Na przykład w miejscu docelowym, można skonfigurować polecenie sparametryzowana, obiekt obiekt docelowy umożliwia wstawianie każdy wiersz danych do źródło danych.

    Dim sqlConn As SqlConnection
    Dim sqlCmd As SqlCommand
    Dim sqlParam As SqlParameter
...
    Public Overrides Sub PreExecute()

        sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
            "VALUES(@addressid, @city)", sqlConn)
        sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
        sqlCmd.Parameters.Add(sqlParam)
        sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
        sqlCmd.Parameters.Add(sqlParam)

    End Sub
    SqlConnection sqlConn; 
    SqlCommand sqlCmd; 
    SqlParameter sqlParam; 
    
    public override void PreExecute() 
    { 
        
        sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(@addressid, @city)", sqlConn); 
        sqlParam = new SqlParameter("@addressid", SqlDbType.Int); 
        sqlCmd.Parameters.Add(sqlParam); 
        sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30); 
        sqlCmd.Parameters.Add(sqlParam); 
       
    }

Przetwarzanie wejść i wyjść

Przetwarzanie danych wejściowych

Składniki skryptów, skonfigurowanych jako przekształcenia lub miejsca docelowe mają jedno wejście.

Zawiera element BufferWrapper projektu

Dla każdego wejścia, które skonfigurowano, BufferWrapper element projektu zawiera klasy, która wynika z ScriptBuffer i ma taką samą nazwę jak dane wejściowe.Każda klasa bufor wejściowy zawiera następujące właściwości, funkcji i metod:

  • Nazwę wpisaną metoda dostępu właściwości dla każdej wybranej kolumna wejściowego.Właściwości te są tylko do odczytu lub zapisu/odczytu w zależności od Użycie typu określone dla kolumna na kolumna wprowadzania strona Script Editor transformacji.

  • A <column>_IsNull właściwość dla każdego wybranego wprowadzania kolumna.Ta właściwość jest tylko do odczytu lub odczytu/zapisu, w zależności od Typ użycie określone dla kolumna.

  • A DirectRowTo<outputbuffer> metoda dla każdego skonfigurowanego wyjściowego.Te metody będą używać do filtrowania wierszy do jednego z kilku wyjść w tym samym ExclusionGroup.

  • A NextRow funkcja uzyskać następnego wiersza wejściowego i EndOfRowset funkcja, aby ustalić, czy ostatni buforu danych zostały przetworzone.Zazwyczaj nie trzeba tych funkcji podczas korzystania z metody implementowane w przetwarzania danych wejściowych UserComponent klasy podstawowejNastępna sekcja zawiera więcej informacji na temat UserComponent klasy podstawowej

Zawiera element ComponentWrapper projektu

Element projektu ComponentWrapper zawiera klasę o nazwie UserComponent , pochodzi z ScriptComponent.ScriptMain Klasy, w którym napisać niestandardowy kod pochodzi z kolei UserComponent.UserComponent Klasa zawiera następujące metody:

  • Implementacja zastąpiona ProcessInput metoda.This is the method that the data flow engine calls next at run time after the PreExecute method, and it may be called multiple times.ProcessInput hands off processing to the <inputbuffer>_ProcessInput method.Następnie ProcessInput Metoda sprawdza końca buforu wejściowego i NotOverridable wywołuje Jeśli osiągnął koniec buforu FinishOutputs metody i prywatnego MarkOutputsAsFinished metody.MarkOutputsAsFinished Wywołuje metoda następnie SetEndOfRowset na ostatnim buforu wyjściowego.

  • Implementacja NotOverridable <inputbuffer>_ProcessInput metoda.Ta implementacja domyślny po prostu pętli każdego wiersza wejściowego i wywołania <inputbuffer>_ProcessInputRow.

  • Implementacja NotOverridable <inputbuffer>_ProcessInputRow metoda.Domyślna implementacja jest pusty.Jest to metoda, która zwykle zastępują napisać kod niestandardowy przetwarzania danych.

Co zrobić, kod niestandardowy

Można użyć następujących metod przetwarzania danych wejściowych w ScriptMain klasy:

  • Zastąpić <inputbuffer>_ProcessInputRow do przetwarzania danych w każdym wierszu wejściowe, jako przechodząca.

  • Zastąpić <inputbuffer>_ProcessInput tylko wtedy, gdy do czegoś dodatkowe podczas pętli wprowadzania wierszy.(Na przykład masz badanie EndOfRowset podjąć inne akcja po przetworzeniu wszystkich wierszy.) Wywołanie <inputbuffer>_ProcessInputRow Wykonywanie przetwarzania wiersza.

  • Zastąpić FinishOutputs trzeba zrobić coś do wyjść przed ich zamknięciem.

ProcessInput Metoda daje pewność, że metody te są nazywane odpowiedni czas.

Przetwarzanie wyjść

Składniki skryptów skonfigurowany jako źródła lub przekształcenia mają wyjść jeden lub więcej.

Zawiera element BufferWrapper projektu

Dla każdego wyjścia, które skonfigurowano, element projektu BufferWrapper zawiera klasy, która wynika z ScriptBuffer i ma taką samą nazwę jak dane wyjściowe.Każda klasa bufor wejściowy zawiera następujące metody i właściwości:

  • O nazwie, wpisany tylko do zapisu metoda dostępu właściwości dla każdego wyjścia kolumna.

  • Tylko do zapisu <column>_IsNull właściwość dla każdej kolumna wybranych danych wyjściowych, zestaw wartość kolumna do null.

  • AddRow metoda, aby dodać nowy pusty wiersz, aby bufor wyjściowy.

  • A SetEndOfRowset metoda browse() aparat przepływ danych wiedzieć więcej buforów danych oczekuje.Istnieje również EndOfRowset funkcja, czy bieżący bufor jest ostatnim bufor danych.Zazwyczaj nie trzeba tych funkcji podczas korzystania z metody implementowane w przetwarzania danych wejściowych UserComponent klasy podstawowej

Zawiera element ComponentWrapper projektu

Element projektu ComponentWrapper zawiera klasę o nazwie UserComponent , pochodzi z ScriptComponent.ScriptMain Klasy, w którym napisać niestandardowy kod pochodzi z kolei UserComponent.UserComponent Klasa zawiera następujące metody:

  • Implementacja zastąpiona PrimeOutput metoda.The data flow engine calls this method before ProcessInput at run time, and it is only called one time.PrimeOutput hands off processing to the CreateNewOutputRows method.Następnie, jeżeli składnik jest źródło (oznacza to, że składnik ma nie nakładów), PrimeOutput wywołania NotOverridable FinishOutputs metoda i prywatnego MarkOutputsAsFinished metoda.MarkOutputsAsFinished Wywołania metoda SetEndOfRowset na ostatnim buforu wyjściowego.

  • Implementacja NotOverridable CreateNewOutputRows metoda.Domyślna implementacja jest pusty.Jest to metoda, która zwykle zastępują napisać kod niestandardowy przetwarzania danych.

Co zrobić, kod niestandardowy

Można użyć następujących metod przetwarzania wyjść w ScriptMain klasy:

  • Zastąpić CreateNewOutputRows tylko wtedy, gdy można dodawać i wypełnić wiersze danych wyjściowych przed przetworzeniem wprowadzania wierszy.Na przykład można użyć CreateNewOutputRows źródło, ale transformacja z asynchronicznego wyjść powinna wywołać AddRow podczas lub po zakończeniu przetwarzania danych wejściowych.

  • Zastąpić FinishOutputs trzeba zrobić coś do wyjść przed ich zamknięciem.

ProcessInput Metoda daje pewność, że metody te są nazywane odpowiedni czas.

Metoda postExecute

Zastąpić PostExecute metoda ScriptComponent klasy bazowej zawsze używać przetwarzania, które należy wykonać jedno czas tylko po przetworzeniu wierszy danych.Na przykład w źródło, chcesz zamknąć System.Data.SqlClient.SqlDataReader używany do ładowania danych do przepływ danych.

Ważna informacjaWażne:

Kolekcja ReadWriteVariables jest dostępna tylko w PostExecute metoda.Bezpośrednio nie można zatem zwiększyć wartość zmiennej pakiet, jak przetworzyć każdy wiersz danych.Zamiast tego należy zwiększyć wartość zmiennej lokalnej i zestaw wartość zmiennej pakiet do wartości zmiennej lokalnej w PostExecute metoda po wszystkie dane zostały przetworzone.

Metoda ReleaseConnections

źródło i miejsca docelowe zazwyczaj należy połączyć z zewnętrznym źródłem danych.Zastąpić ReleaseConnections metoda ScriptComponent bazowy klasy Zamknij i zwolnienie połączenia, które były wcześniej otwierane w AcquireConnections metoda.

    Dim connMgr As IDTSConnectionManager100
...
    Public Overrides Sub ReleaseConnections()

        connMgr.ReleaseConnection(sqlConn)

    End Sub
    IDTSConnectionManager100 connMgr;

    public override void ReleaseConnections()
    {

        connMgr.ReleaseConnection(sqlConn);

    }
Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona na MSDN i TechNet:

Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.