Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
SSIS Integration Runtime v rámci Azure Data Factory
Jak je popsáno v části Coding and Debugging the Script Component, projekt Script component obsahuje tři položky projektu:
Položka ScriptMain , která obsahuje třídu ScriptMain , ve které píšete svůj kód. Třída ScriptMain dědí třídu UserComponent .
Položka ComponentWrapper , která obsahuje třídu UserComponent , instance ScriptComponent , která obsahuje metody a vlastnosti, které budete používat k zpracování dat a interakci s balíčkem. Položka ComponentWrapper také obsahuje třídy kolekcí Connections and Variables .
Položka BufferWrapper , která obsahuje třídy dědící z pro ScriptBuffer každý vstup a výstup a typované vlastnosti pro každý sloupec.
Při psaní kódu v položce ScriptMain budete používat objekty, metody a vlastnosti diskutované v tomto tématu. Každá komponenta nebude používat všechny zde uvedené metody; avšak při použití jsou použity v uvedené sekvenci.
Základní třída ScriptComponent neobsahuje žádný implementační kód pro metody diskutované v tomto tématu. Proto není nutné, ale neškodné, přidávat volání do implementace základní třídy do vaší vlastní implementace metody.
Pro informace o tom, jak používat metody a vlastnosti těchto tříd v konkrétním typu komponent Script, viz sekce Další příklady komponent skriptů. Ukázková témata také obsahují kompletní ukázky kódu.
Metoda AcquireConnections
Zdroje a cíle obvykle musí být připojeny k externímu datovému zdroji. Přepisujte AcquireConnections metodu základní třídy ScriptComponent a získáme spojení nebo informace o spojení z příslušného správce spojení.
Následující příklad vrací System.Data.SqlClient.SqlConnection ze správce připojení ADO.NET.
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
Následující příklad vrátí kompletní cestu a název souboru z Flat File Správce připojení a poté soubor otevře 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
Přepisujte PreExecute metodu základní třídy ScriptComponent vždy, když máte zpracování, které musíte provést pouze jednou, než začnete zpracovávat řádky dat. Například v cílové oblasti můžete chtít nastavit parametrizovaný příkaz, který cíl použije k vložení každého řádku dat do datového zdroje.
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);
}
Zpracování vstupů a výstupů
Zpracování vstupů
Skriptové komponenty, které jsou konfigurovány jako transformace nebo cíle, mají jeden vstup.
Co poskytuje položka BufferWrapper Project
Pro každý vstup, který jste nakonfigurovali, obsahuje položka projektu BufferWrapper třídu, která pochází z a ScriptBuffer má stejný název jako vstup. Každá třída vstupního bufferu obsahuje následující vlastnosti, funkce a metody:
Pojmenované, typované vlastnosti accessoru pro každý vybraný vstupní sloupec. Tyto vlastnosti jsou pouze pro čtení nebo pro čtení/zápis v závislosti na typu použití specifikovaném pro sloupec na stránce Vstupní sloupceEditoru transformace skriptů.
Sloupec>_IsNull vlastnost pro každý vybraný< vstupní sloupec. Tato vlastnost je také pouze pro čtení nebo pro čtení/zápis v závislosti na typu použití určeném pro daný sloupec.
Metoda DirectRowTo<outputbufferu> pro každý konfigurovaný výstup. Tyto metody použijete při filtrování řádků do jednoho z několika výstupů ve stejné ExclusionGroup.
Funkce NextRow pro získání dalšího vstupního řádku a funkce EndOfRowset pro určení, zda byl poslední buffer dat zpracován. Tyto funkce obvykle nepotřebujete, když používáte metody zpracování vstupů implementované v základní třídě UserComponent . Další sekce poskytuje více informací o základní třídě UserComponent .
Co poskytuje položka ComponentWrapper Project
Položka projektu ComponentWrapper obsahuje třídu nazvanou UserComponent , která pochází z ScriptComponent. Třída ScriptMain , ve které píšete vlastní kód, vychází z UserComponent. Třída UserComponent obsahuje následující metody:
Přepsaná implementace metody ProcessInput . Toto je metoda, kterou datový tok volá za běhu po metodě PreExecute a může být volána vícekrát. ProcessInput předává zpracování metodě <inputbuffer>_ProcessInput . Poté metoda ProcessInput kontroluje konec vstupního bufferu a pokud byl konec bufferu dosažen, zavolá přepisovatelnou metodu FinishOutputs a soukromou metodu MarkOutputsAsFinish. Metoda MarkOutputsAsFinished pak volá SetEndOfRowset na posledním výstupním bufferu.
Překonatelná implementace <metody inputbuffer>_ProcessInput . Tato výchozí implementace jednoduše prochází každý vstupní řádek a volá <inputbuffer>_ProcessInputRow.
Překonatelná implementace <metody inputbuffer>_ProcessInputRow . Výchozí implementace je prázdná. Toto je metoda, kterou obvykle přepsáváte a napsáte vlastní kód pro zpracování dat.
Co by měl váš vlastní kód dělat
Ve třídě ScriptMain můžete použít následující metody pro zpracování vstupu:
Přepisovat <inputbuffer>_ProcessInputRow aby zpracovával data v každém vstupním řádku při jeho průchodu.
Přepisujte <input buffer>_ProcessInput jen pokud musíte při procházení vstupních řádků udělat něco navíc. (Například musíte otestovat, aby EndOfRowset provedl nějakou další akci poté, co byly všechny řádky zpracovány.) Zavolejte <inputbuffer>_ProcessInputRow pro zpracování řádků.
Přepisujte FinishOutputs , pokud musíte něco udělat s výstupy před jejich uzavřením.
Metoda ProcessInput zajišťuje, že tyto metody jsou vyvolávány ve správných časech.
Výstupy zpracování
Skriptové komponenty konfigurované jako zdroje nebo transformace mají jeden nebo více výstupů.
Co poskytuje položka BufferWrapper Project
Pro každý výstup, který jste nakonfigurovali, obsahuje položka projektu BufferWrapper třídu, která pochází z a ScriptBuffer má stejný název jako výstup. Každá třída vstupního bufferu obsahuje následující vlastnosti a metody:
Vlastnosti přístupového modulu pro každý výstupní sloupec jsou pojmenované, zadané, pouze pro zápis.
Sloupec> pouze< pro zápis_IsNull vlastnost pro každý vybraný výstupní sloupec, kterou můžete použít k nastavení hodnoty sloupce na null.
Metoda AddRow pro přidání prázdného nového řádku do výstupního bufferu.
Metoda SetEndOfRowset , která dává dat flow engine vědět, že se neočekává žádné další datové buffery. Existuje také funkce EndOfRowset pro určení, zda je aktuální buffer posledním datovým bufferem. Tyto funkce obvykle nepotřebujete, když používáte metody zpracování vstupů implementované v základní třídě UserComponent .
Co poskytuje položka ComponentWrapper Project
Položka projektu ComponentWrapper obsahuje třídu nazvanou UserComponent , která pochází z ScriptComponent. Třída ScriptMain , ve které píšete vlastní kód, vychází z UserComponent. Třída UserComponent obsahuje následující metody:
Přepsaná implementace metody PrimeOutput . Datový tok vyvolává tuto metodu před ProcessInput za běhu a je volána pouze jednou. PrimeOutput předává zpracování metodě CreateNewOutputRows . Pokud je komponenta zdrojem (tedy komponenta nemá žádné vstupy), PrimeOutput zavolá přepisovatelnou metodu FinishOutputs a soukromou metodu MarkOutputsAsFinish. Metoda MarkOutputsAsFinished volá SetEndOfRowset na posledním výstupním bufferu.
Přepisovatelná implementace metody CreateNewOutputRows . Výchozí implementace je prázdná. Toto je metoda, kterou obvykle přepsáváte a napsáte vlastní kód pro zpracování dat.
Co by měl váš vlastní kód dělat
K zpracování výstupů ve třídě ScriptMain můžete použít následující metody:
Přepisujte CreateNewOutputRows pouze tehdy, když můžete přidat a vyplnit výstupní řádky před zpracováním vstupních řádků. Například můžete použít CreateNewOutputRows ve zdroji, ale při transformaci s asynchronními výstupy byste měli během nebo po zpracování vstupních dat volat AddRow .
Přepisujte FinishOutputs , pokud musíte něco udělat s výstupy před jejich uzavřením.
Metoda PrimeOutput zajišťuje, že tyto metody jsou vyvolávány ve správných časech.
Metoda PostExecute
Přepisujte PostExecute metodu základní třídy ScriptComponent vždy, když máte zpracování, které musíte provést pouze jednou poté, co zpracujete řádky dat. Například ve zdrojovém kódu můžete chtít zavřít System.Data.SqlClient.SqlDataReader, který jste použili k načtení dat do datového toku.
Important
Kolekce ReadWriteVariables je dostupná pouze v metodě PostExekute . Proto nelze přímo zvyšovat hodnotu proměnné balíčku při zpracování každého řádku dat. Místo toho zvyšujte hodnotu lokální proměnné a nastavte hodnotu proměnné balíčku na hodnotu lokální proměnné v metodě PostExecute po zpracování všech dat.
Metoda ReleaseConnections
Zdroje a cíle obvykle musí být připojeny k externímu datovému zdroji. Přepisujte metodu ReleaseConnections základní třídy ScriptComponent a uzavřete a uvolníte spojení, které jste dříve v metodě AcquireConnections otevřeli.
Dim connMgr As IDTSConnectionManager100
...
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
IDTSConnectionManager100 connMgr;
public override void ReleaseConnections()
{
connMgr.ReleaseConnection(sqlConn);
}