Informazioni sul modello a oggetti del componente scriptUnderstanding the Script Component Object Model

Come descritto in la codifica e debug del componente Script, il progetto di componente Script contiene tre elementi di progetto:As discussed in Coding and Debugging the Script Component, the Script component project contains three project items:

  1. Il la classe ScriptMain elemento, che contiene il la classe ScriptMain classe in cui scrivere il codice.The ScriptMain item, which contains the ScriptMain class in which you write your code. Il la classe ScriptMain classe eredita il UserComponent classe.The ScriptMain class inherits from the UserComponent class.

  2. Il ComponentWrapper elemento, che contiene il UserComponent un'istanza della classe ScriptComponent che contiene i metodi e proprietà che verrà utilizzato per elaborare i dati e di interagire con il pacchetto.The ComponentWrapper item, which contains the UserComponent class, an instance of ScriptComponent that contains the methods and properties that you will use to process data and to interact with the package. Il ComponentWrapper elemento contiene inoltre connessioni e variabili classi di raccolte.The ComponentWrapper item also contains Connections and Variables collection classes.

  3. Il BufferWrapper item, che contiene le classi che eredita da ScriptBuffer per ogni proprietà di input e output e tipizzate per ogni colonna.The BufferWrapper item, which contains classes that inherits from ScriptBuffer for each input and output, and typed properties for each column.

    Quando si scrive codice nel la classe ScriptMain elemento, si utilizzerà oggetti, metodi e proprietà trattate in questo argomento.As you write your code in the ScriptMain item, you will use the objects, methods, and properties discussed in this topic. Ogni componente non utilizzerà tutti i metodi elencati, ma se li utilizza la sequenza sarà quella illustrata.Each component will not use all the methods listed here; however, when used, they are used in the sequence shown.

    La classe di base ScriptComponent non contiene codice di implementazione per i metodi descritti in questo argomento.The ScriptComponent base class does not contain any implementation code for the methods discussed in this topic. Pertanto, non è necessario aggiungere una chiamata all'implementazione della classe di base nell'implementazione del metodo, anche se questa operazione non genera errori.Therefore it is unnecessary, but harmless, to add a call to the base class implementation to your own implementation of the method.

    Per informazioni su come usare i metodi e proprietà di queste classi in un determinato tipo di componente Script, vedere la sezione ulteriori esempi di componente Script.For information about how to use the methods and properties of these classes in a particular type of Script component, see the section Additional Script Component Examples. Negli argomenti di esempio vengono inoltre presentati esempi di codice completi.The example topics also contain complete code samples.

Metodo AcquireConnectionsAcquireConnections Method

Le origini e le destinazioni devono in genere connettersi a un'origine dati esterna.Sources and destinations generally must connect to an external data source. Eseguire l'override del metodo AcquireConnections della classe di base ScriptComponent per recuperare la connessione o le informazioni di connessione dalla gestione connessione appropriata.Override the AcquireConnections method of the ScriptComponent base class to retrieve the connection or the connection information from the appropriate connection manager.

Nell'esempio seguente viene restituito un SqlConnection da una gestione connessione ADO.NET.The following example returns a System.Data.SqlClient.SqlConnection from an ADO.NET connection manager.

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  

Nell'esempio seguente restituisce un percorso completo e nome del file dalla gestione connessione File Flat e quindi apre il file utilizzando un System.IO.The following example returns a complete path and file name from a Flat File Connection Manager, and then opens the file by using a 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  

Metodo PreExecutePreExecute Method

Eseguire l'override del metodo PreExecute della classe di base ScriptComponent quando è necessario eseguire un'elaborazione una volta solo prima di avviare l'elaborazione delle righe di dati.Override the PreExecute method of the ScriptComponent base class whenever you have processing that you must perform one time only before you start processing rows of data. In una destinazione, ad esempio, è possibile configurare il comando con parametri che verrà utilizzato dalla destinazione stessa per inserire ogni riga di dati nell'origine dati.For example, in a destination, you may want to configure the parameterized command that the destination will use to insert each row of data into the data source.

    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);   

}  

Elaborazione di input e outputProcessing Inputs and Outputs

Elaborazione di inputProcessing Inputs

I componenti script configurati come trasformazioni o destinazioni prevedono un unico input.Script components that are configured as transformations or destinations have one input.

Contenuto dell'elemento di progetto BufferWrapperWhat the BufferWrapper Project Item Provides

Per ogni input che è stato configurato, il BufferWrapper elemento di progetto contiene una classe che deriva da ScriptBuffer e ha lo stesso nome come input.For each input that you have configured, the BufferWrapper project item contains a class that derives from ScriptBuffer and has the same name as the input. Ogni classe del buffer di input contiene le proprietà, le funzioni e i metodi seguenti:Each input buffer class contains the following properties, functions, and methods:

  • Proprietà delle funzioni di accesso denominate e tipizzate per ogni colonna di input selezionata.Named, typed accessor properties for each selected input column. Queste proprietà sono di sola lettura o lettura/scrittura a seconda di tipo di utilizzo specificato per la colonna nel colonne di Input pagina del Editor trasformazione Script.These properties are read-only or read/write depending on the Usage Type specified for the column on the Input Columns page of the Script Transformation Editor.

  • Oggetto <colonna > _IsNull colonna delle proprietà per ogni selezionato di input.A <column>_IsNull property for each selected input column. Questa proprietà è di sola lettura o lettura/scrittura a seconda di tipo di utilizzo specificato per la colonna.This property is also read-only or read/write depending on the Usage Type specified for the column.

  • Oggetto DirectRowTo<outputbuffer > metodo per ogni output configurato.A DirectRowTo<outputbuffer> method for each configured output. Questi metodi vengono utilizzati per filtrare le righe a uno di output diversi nello stesso ExclusionGroup.You will use these methods when filtering rows to one of several outputs in the same ExclusionGroup.

  • Oggetto NextRow funzione per ottenere la riga di input successiva e un EndOfRowset funzione per determinare se è stato elaborato l'ultimo buffer di dati.A NextRow function to get the next input row, and an EndOfRowset function to determine whether the last buffer of data has been processed. In genere non è necessario queste funzioni quando si utilizzano i metodi implementati nell'elaborazione dell'input di UserComponent classe di base.You typically do not need these functions when you use the input processing methods implemented in the UserComponent base class. La sezione successiva vengono fornite ulteriori informazioni sul UserComponent classe di base.The next section provides more information about the UserComponent base class.

Contenuto dell'elemento di progetto ComponentWrapperWhat the ComponentWrapper Project Item Provides

L'elemento di progetto ComponentWrapper contiene una classe denominata UserComponent che deriva da ScriptComponent.The ComponentWrapper project item contains a class named UserComponent that derives from ScriptComponent. Il la classe ScriptMain classe in cui scrivere il codice personalizzato deriva a sua volta da UserComponent.The ScriptMain class in which you write your custom code derives in turn from UserComponent. Il UserComponent classe contiene i metodi seguenti:The UserComponent class contains the following methods:

  • Un'implementazione dell'override di ProcessInput metodo.An overridden implementation of the ProcessInput method. Si tratta del metodo che i dati chiamato dal motore flusso in fase di esecuzione dopo il PreExecute (metodo) e può essere chiamato più volte.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 trasferisce l'elaborazione per il <inputbuffer > _ProcessInput metodo.ProcessInput hands off processing to the <inputbuffer>_ProcessInput method. Il ProcessInput metodo verifica la fine del buffer di input e, se è stata raggiunta la fine del buffer, chiama il sottoponibile a override FinishOutputs metodo e privato MarkOutputsAsFinished metodo.Then the ProcessInput method checks for the end of the input buffer and, if the end of the buffer has been reached, calls the overridable FinishOutputs method and the private MarkOutputsAsFinished method. Il MarkOutputsAsFinished chiama quindi SetEndOfRowset sull'ultimo buffer di output.The MarkOutputsAsFinished method then calls SetEndOfRowset on the last output buffer.

  • Un'implementazione sottoponibile a override del <inputbuffer > _ProcessInput metodo.An overridable implementation of the <inputbuffer>_ProcessInput method. Questa implementazione predefinita esegue il ciclo di ogni riga di input e chiama <inputbuffer > _ProcessInputRow.This default implementation simply loops through each input row and calls <inputbuffer>_ProcessInputRow.

  • Un'implementazione sottoponibile a override del <inputbuffer > _ProcessInputRow metodo.An overridable implementation of the <inputbuffer>_ProcessInputRow method. L'implementazione predefinita è vuota.The default implementation is empty. Si tratta del metodo di cui in genere si esegue l'override per scrivere il codice personalizzato di elaborazione dati.This is the method that you will normally override to write your custom data processing code.

Funzione del codice personalizzatoWhat Your Custom Code Should Do

È possibile utilizzare i metodi seguenti per elaborare l'input nel la classe ScriptMain classe:You can use the following methods to process input in the ScriptMain class:

  • Eseguire l'override <inputbuffer > _ProcessInputRow per elaborare i dati in ogni riga di input durante il passaggio attraverso.Override <inputbuffer>_ProcessInputRow to process the data in each input row as it passes through.

  • Eseguire l'override <inputbuffer > _ProcessInput solo se è necessario eseguire operazioni aggiuntive durante lo scorrimento in ciclo tra le righe di input.Override <inputbuffer>_ProcessInput only if you have to do something additional while looping through input rows. (Ad esempio, è necessario verificare la presenza di EndOfRowset per eseguire altre azioni dopo tutte le righe sono state elaborate.) Chiamare <inputbuffer > _ProcessInputRow per eseguire l'elaborazione delle righe.(For example, you have to test for EndOfRowset to take some other action after all rows have been processed.) Call <inputbuffer>_ProcessInputRow to perform the row processing.

  • Eseguire l'override FinishOutputs se è necessario eseguire operazioni sugli output prima che vengano chiusi.Override FinishOutputs if you have to do something to the outputs before they are closed.

    Il ProcessInput metodo assicura che questi metodi vengono chiamati in momenti appropriati.The ProcessInput method ensures that these methods are called at the appropriate times.

Elaborazione degli outputProcessing Outputs

I componenti script configurati come origini o trasformazioni includono uno o più output.Script components configured as sources or transformations have one or more outputs.

Contenuto dell'elemento di progetto BufferWrapperWhat the BufferWrapper Project Item Provides

Per ogni output configurato, l'elemento di progetto BufferWrapper contiene una classe che deriva da ScriptBuffer e ha lo stesso nome dell'output.For each output that you have configured, the BufferWrapper project item contains a class that derives from ScriptBuffer and has the same name as the output. Ogni classe del buffer di input contiene le proprietà e i metodi seguenti:Each input buffer class contains the following properties and methods:

  • Proprietà delle funzioni di accesso di sola scrittura, denominate e tipizzate per ogni colonna di output.Named, typed, write-only accessor properties for each output column.

  • Sola scrittura <colonna > _IsNull proprietà per ogni colonna di output selezionato che è possibile utilizzare per impostare il valore della colonna su null.A write-only <column>_IsNull property for each selected output column that you can use to set the column value to null.

  • Un AddRow metodo per aggiungere una nuova riga vuota al buffer di output.An AddRow method to add an empty new row to the output buffer.

  • Oggetto SetEndOfRowset metodo per informare il motore del flusso di dati che non sono previsti più buffer di dati.A SetEndOfRowset method to let the data flow engine know that no more buffers of data are expected. È inoltre disponibile un EndOfRowset funzione per determinare se il buffer corrente è l'ultimo buffer di dati.There is also an EndOfRowset function to determine whether the current buffer is the last buffer of data. In genere non è necessario queste funzioni quando si utilizzano i metodi implementati nell'elaborazione dell'input di UserComponent classe di base.You generally do not need these functions when you use the input processing methods implemented in the UserComponent base class.

Contenuto dell'elemento di progetto ComponentWrapperWhat the ComponentWrapper Project Item Provides

L'elemento di progetto ComponentWrapper contiene una classe denominata UserComponent che deriva da ScriptComponent.The ComponentWrapper project item contains a class named UserComponent that derives from ScriptComponent. Il la classe ScriptMain classe in cui scrivere il codice personalizzato deriva a sua volta da UserComponent.The ScriptMain class in which you write your custom code derives in turn from UserComponent. Il UserComponent classe contiene i metodi seguenti:The UserComponent class contains the following methods:

  • Un'implementazione dell'override di PrimeOutput metodo.An overridden implementation of the PrimeOutput method. Il motore del flusso di dati chiama questo metodo prima ProcessInput in fase di esecuzione e viene chiamato solo una volta.The data flow engine calls this method before ProcessInput at run time, and it is only called one time. PrimeOutput trasferisce l'elaborazione per il CreateNewOutputRows metodo.PrimeOutput hands off processing to the CreateNewOutputRows method. Quindi, se il componente è un'origine (ovvero, il componente non include input), PrimeOutput chiama il sottoponibile a override FinishOutputs metodo e privato MarkOutputsAsFinished metodo.Then, if the component is a source (that is, the component has no inputs), PrimeOutput calls the overridable FinishOutputs method and the private MarkOutputsAsFinished method. Il MarkOutputsAsFinished chiamate al metodo SetEndOfRowset sull'ultimo buffer di output.The MarkOutputsAsFinished method calls SetEndOfRowset on the last output buffer.

  • Un'implementazione sottoponibile a override del CreateNewOutputRows metodo.An overridable implementation of the CreateNewOutputRows method. L'implementazione predefinita è vuota.The default implementation is empty. Si tratta del metodo di cui in genere si esegue l'override per scrivere il codice personalizzato di elaborazione dati.This is the method that you will normally override to write your custom data processing code.

Funzione del codice personalizzatoWhat Your Custom Code Should Do

È possibile utilizzare i metodi seguenti per elaborare gli output nel la classe ScriptMain classe:You can use the following methods to process outputs in the ScriptMain class:

  • Eseguire l'override CreateNewOutputRows solo quando è possibile aggiungere e popolare le righe di output prima di elaborare le righe di input.Override CreateNewOutputRows only when you can add and populate output rows before processing input rows. Ad esempio, è possibile utilizzare CreateNewOutputRows in un'origine, ma in una trasformazione con output asincroni, è necessario chiamare AddRow durante o dopo l'elaborazione di dati di input.For example, you can use CreateNewOutputRows in a source, but in a transformation with asynchronous outputs, you should call AddRow during or after the processing of input data.

  • Eseguire l'override FinishOutputs se è necessario eseguire operazioni sugli output prima che vengano chiusi.Override FinishOutputs if you have to do something to the outputs before they are closed.

    Il PrimeOutput metodo assicura che questi metodi vengono chiamati in momenti appropriati.The PrimeOutput method ensures that these methods are called at the appropriate times.

Metodo PostExecutePostExecute Method

Eseguire l'override del metodo PostExecute della classe di base ScriptComponent quando è necessario eseguire un'elaborazione un'unica volta solo dopo aver elaborato le righe di dati.Override the PostExecute method of the ScriptComponent base class whenever you have processing that you must perform one time only after you have processed the rows of data. Ad esempio, un'origine, si consiglia di chiudere il System.Data.SqlClient.SqlDataReader utilizzato per caricare i dati nel flusso di dati.For example, in a source, you may want to close the System.Data.SqlClient.SqlDataReader that you have used to load data into the data flow.

Importante

La raccolta di ReadWriteVariables è disponibile solo nel PostExecute metodo.The collection of ReadWriteVariables is available only in the PostExecute method. Pertanto, non è possibile incrementare direttamente il valore di una variabile del pacchetto durante l'elaborazione di ogni riga di dati.Therefore you cannot directly increment the value of a package variable as you process each row of data. Al contrario, incrementare il valore di una variabile locale e impostare il valore della variabile del pacchetto per il valore della variabile locale nel PostExecute metodo dopo tutti i dati è stata elaborata.Instead, increment the value of a local variable, and set the value of the package variable to the value of the local variable in the PostExecute method after all data has been processed.

Metodo ReleaseConnectionsReleaseConnections Method

Le origini e le destinazioni devono in genere connettersi a un'origine dati esterna.Sources and destinations typically must connect to an external data source. Eseguire l'override del metodo ReleaseConnections della classe di base ScriptComponent per chiudere e rilasciare la connessione aperta in precedenza nel metodo AcquireConnections.Override the ReleaseConnections method of the ScriptComponent base class to close and release the connection that you have opened previously in the AcquireConnections method.

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

        connMgr.ReleaseConnection(sqlConn)  

    End Sub  
IDTSConnectionManager100 connMgr;  

public override void ReleaseConnections()  
{  

    connMgr.ReleaseConnection(sqlConn);  

}  

Vedere ancheSee Also

Configurazione del componente Script nell'Editor del componente di Script Configuring the Script Component in the Script Component Editor
La codifica e debug del componente ScriptCoding and Debugging the Script Component