Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
SSIS Integration Runtime i Azure Data Factory
Som diskuterats i Coding and Debugging the Script Component innehåller Script component-projektet tre projektobjekt:
ScriptMain-objektet, som innehåller klassen ScriptMain där du skriver din kod. ScriptMain-klassen ärver från UserComponent-klassen.
ComponentWrapper-objektet, som innehåller klassen UserComponent, en instans av ScriptComponent som innehåller metoderna och egenskaperna du kommer att använda för att bearbeta data och interagera med paketet. ComponentWrapper-objektet innehåller också samlingsklasser för anslutningar och variabler.
BufferWrapper-objektet, som innehåller klasser som ärver från ScriptBuffer för varje in- och utdata, samt typade egenskaper för varje kolumn.
När du skriver din kod i ScriptMain-objektet kommer du att använda de objekt, metoder och egenskaper som diskuteras i detta ämne. Varje komponent använder inte alla metoder som listas här; men när de används används de i den sekvens som visas.
Basklassen ScriptComponent innehåller ingen implementeringskod för de metoder som diskuteras i detta ämne. Därför är det onödigt, men ofarligt, att lägga till ett anrop till basklassimplementeringen till din egen implementation av metoden.
För information om hur man använder metoder och egenskaper hos dessa klasser i en viss typ av skriptkomponent, se avsnittet Ytterligare exempel på skriptkomponenter. Exempelämnena innehåller också kompletta kodexempel.
AcquireConnections-metoden
Källor och destinationer måste i allmänhet kopplas till en extern datakälla. Överstyr AcquireConnections basklassens ScriptComponent metod för att hämta anslutningen eller anslutningsinformationen från lämplig anslutningshanterare.
Följande exempel returnerar en System.Data.SqlClient.SqlConnection från en ADO.NET-anslutningshanterare.
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
Följande exempel returnerar en komplett sökväg och filnamn från en Flat File Správca pripojení, och öppnar sedan filen med en 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
PreExekver-metoden
Åsidosätt PreExecute basklassens ScriptComponent metod när du har bearbetning som du måste utföra en gång innan du börjar bearbeta datarader. Till exempel, i en destination kan du vilja konfigurera det parameteriserade kommandot som destinationen använder för att infoga varje datarad i datakällan.
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);
}
Bearbetning av in- och utgångar
Bearbetning av indata
Skriptkomponenter som är konfigurerade som transformationer eller destinationer har en inmatning.
Vad BufferWrapper Project-objektet tillhandahåller
För varje indata du har konfigurerat innehåller BufferWrapper-projektobjektet en klass som härstammar från ScriptBuffer och har samma namn som indatan. Varje indatabuffertklass innehåller följande egenskaper, funktioner och metoder:
Namngivna, typade accessoregenskaper för varje vald indatakolumn. Dessa egenskaper är skrivskyddade eller läs-/skriv-liknande beroende på vilken användningstyp som anges för kolumnen på sidan Input Columns i Script Transformation Editor.
En <kolumn>_IsNull egenskap för varje vald indatakolumn. Denna egenskap är också skrivskyddad eller läs/skriv beroende på vilken användningstyp som anges för kolumnen.
En DirectRowTo-outputbuffermetod<> för varje konfigurerad utdata. Du kommer att använda dessa metoder när du filtrerar rader till en av flera utdata i samma ExclusionGroup.
En NextRow-funktion för att hämta nästa inmatningsrad, och en EndOfRowset-funktion för att avgöra om den senaste databufferten har behandlats. Du behöver vanligtvis inte dessa funktioner när du använder de inmatningsmetoder som implementerats i UserComponent-basklassen . Nästa avsnitt ger mer information om basklassen UserComponent .
Vad ComponentWrapper Project-objektet tillhandahåller
Projektobjektet ComponentWrapper innehåller en klass som heter UserComponent och härstammar från ScriptComponent. ScriptMain-klassen där du skriver din anpassade kod härstammar i sin tur från UserComponent. UserComponent-klassen innehåller följande metoder:
En överskriven implementation av ProcessInput-metoden . Detta är metoden som dataflödesmotorn anropar nästa gång vid körning efter PreExekver-metoden , och den kan anropas flera gånger. ProcessInput överlämnar bearbetningen till <inputbuffer>_ProcessInput metoden. Därefter kontrollerar ProcessInput-metoden slutet på inmatningsbufferten och, om bufferten har nåtts slut, anropar den den överskrivbara FinishOutputs-metoden och den privata MarkOutputsAsFinished-metoden . MarkOutputsAsFinished-metoden anropar sedan SetEndOfRowset på den senaste utdatabufferten.
En överskrivbar implementation av <inputbuffer>_ProcessInput metoden. Denna standardimplementation loopar helt enkelt igenom varje inmatningsrad och anropar <inputbuffer>_ProcessInputRow.
En överskrivbar implementation av <inputbuffer>_ProcessInputRow metoden. Standardimplementeringen är tom. Detta är metoden som du normalt överskriver för att skriva din egna databehandlingskod.
Vad din anpassade kod ska göra
Du kan använda följande metoder för att bearbeta indata i ScriptMain-klassen :
Överstyr <inputbuffer>_ProcessInputRow för att bearbeta data i varje indatarad när den passerar.
Åsidosätt <inputbuffer>_ProcessInput bara om du måste göra något extra medan du loopar genom inmatningsrader. (Till exempel måste du testa för EndOfRowset för att utföra någon annan åtgärd efter att alla rader har behandlats.) Anropa <inputbuffer>_ProcessInputRow för att utföra radbearbetningen.
Överstyr FinishOutputs om du måste göra något med utgångarna innan de stängs.
ProcessInput-metoden säkerställer att dessa metoder anropas vid lämpliga tidpunkter.
Bearbetningsutgångar
Skriptkomponenter konfigurerade som källor eller transformationer har en eller flera utdata.
Vad BufferWrapper Project-objektet tillhandahåller
För varje output du har konfigurerat innehåller BufferWrapper-projektobjektet en klass som härstammar från ScriptBuffer och har samma namn som outputen. Varje indatabuffertklass innehåller följande egenskaper och metoder:
Namngivna, typade, skrivbara accessoregenskaper för varje utdatakolumn.
En skrivbara <kolumn>_IsNull egenskap för varje vald utdatakolumn som du kan använda för att sätta kolumnvärdet till noll.
En AddRow-metod för att lägga till en tom ny rad i utdatabufferten.
En SetEndOfRowset-metod för att låta dataflödesmotorn veta att inga fler databuffertar förväntas. Det finns också en EndOfRowset-funktion för att avgöra om den aktuella bufferten är den sista bufferten av data. Du behöver generellt inte dessa funktioner när du använder de inmatningsmetoder som implementerats i UserComponent-basklassen .
Vad ComponentWrapper Project-objektet tillhandahåller
Projektobjektet ComponentWrapper innehåller en klass som heter UserComponent och härstammar från ScriptComponent. ScriptMain-klassen där du skriver din anpassade kod härstammar i sin tur från UserComponent. UserComponent-klassen innehåller följande metoder:
En överskriven implementation av PrimeOutput-metoden . Dataflödesmotorn anropar denna metod före ProcessInput vid körning, och den anropas bara en gång. PrimeOutput överlämnar bearbetningen till metoden CreateNewOutputRows . Om komponenten sedan är en källa (det vill säga komponenten saknar indata), anropar PrimeOutput den överskrivbara FinishOutputs-metoden och den privata MarkOutputsAsFinished-metoden . MarkOutputsAsFinished-metoden anropar SetEndOfRowset på den senaste utdatabufferten.
En överskrivbar implementation av metoden CreateNewOutputRows . Standardimplementeringen är tom. Detta är metoden som du normalt överskriver för att skriva din egna databehandlingskod.
Vad din anpassade kod ska göra
Du kan använda följande metoder för att bearbeta utdata i ScriptMain-klassen :
Överskriv CreateNewOutputRows endast när du kan lägga till och fylla i utdatarader innan du bearbetar inmatningsrader. Till exempel kan du använda CreateNewOutputRows i en källa, men i en transformation med asynkrona utdata bör du anropa AddRow under eller efter bearbetningen av indata.
Överstyr FinishOutputs om du måste göra något med utgångarna innan de stängs.
PrimeOutput-metoden säkerställer att dessa metoder anropas vid lämpliga tidpunkter.
PostExekver-metoden
Åsidosätt PostExecute basklassens ScriptComponent metod när du har bearbetning som du måste utföra en gång först efter att du har bearbetat dataraderna. Till exempel, i en källkod kan du vilja stänga System.Data.SqlClient.SqlDataReader som du har använt för att ladda data i dataflödet.
Important
Samlingen av ReadWriteVariables är endast tillgänglig i PostExekver-metoden . Därför kan du inte direkt öka värdet på en paketvariabel när du bearbetar varje datarad. Istället ökar du värdet på en lokal variabel och sätter värdet på paketvariabeln till värdet av den lokala variabeln i PostExekver-metoden efter att all data har behandlats.
ReleaseConnections-metoden
Källor och destinationer måste vanligtvis kopplas till en extern datakälla. Åsidosätt ReleaseConnections basklassens ScriptComponent metod för att stänga och släppa den anslutning du tidigare öppnat AcquireConnections i systemet.
Dim connMgr As IDTSConnectionManager100
...
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
IDTSConnectionManager100 connMgr;
public override void ReleaseConnections()
{
connMgr.ReleaseConnection(sqlConn);
}