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

Come illustrato in Codifica e debug del componente script, il progetto del componente script contiene tre elementi:As discussed in Coding and Debugging the Script Component, the Script component project contains three project items:

  1. L'elemento ScriptMain che contiene la classe ScriptMain in cui viene scritto il codice.The ScriptMain item, which contains the ScriptMain class in which you write your code. La classe ScriptMain eredita dalla classe UserComponent.The ScriptMain class inherits from the UserComponent class.

  2. L'elemento ComponentWrapper, che contiene la classe UserComponent, un'istanza di ScriptComponent che contiene i metodi e le proprietà da usare per elaborare i dati e 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. L'elemento ComponentWrapper contiene anche le classi delle raccolte Connections e Variables.The ComponentWrapper item also contains Connections and Variables collection classes.

  3. L'elemento BufferWrapper, che contiene le classi che ereditano da ScriptBuffer per ogni input e output, nonché le proprietà 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 il codice nell'elemento ScriptMain si useranno gli oggetti, i metodi e le proprietà illustrati 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 le proprietà di queste classi in un tipo di componente script specifico, 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 System.Data.SqlClient.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 vengono restituiti un percorso completo e un nome file da una gestione connessione file flat, quindi il file viene aperto usando System.IO.StreamReader.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 configurato, l'elemento di progetto BufferWrapper contiene una classe che deriva da ScriptBuffer e ha lo stesso nome dell'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 di lettura/scrittura a seconda del Tipo di utilizzo specificato per la colonna nella pagina Colonne di input di 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.

  • Una proprietà <column>_IsNull per ogni colonna di input selezionata.A <column>_IsNull property for each selected input column. Anche questa proprietà è di sola lettura o di lettura/scrittura a seconda del 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.

  • Un metodo DirectRowTo<outputbuffer> per ogni output configurato.A DirectRowTo<outputbuffer> method for each configured output. Questi metodi verranno usati per filtrare le righe in uno dei diversi output dello stesso elemento ExclusionGroup.You will use these methods when filtering rows to one of several outputs in the same ExclusionGroup.

  • Una funzione NextRow per ottenere la riga di input successiva e una funzione EndOfRowset 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. Queste funzioni non sono in genere necessarie quando si usano i metodi di elaborazione dell'input implementati nella classe di base UserComponent.You typically do not need these functions when you use the input processing methods implemented in the UserComponent base class. La sezione seguente contiene altre informazioni sulla classe di base UserComponent.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. La classe ScriptMain in cui si scrive il codice personalizzato deriva a sua volta da UserComponent.The ScriptMain class in which you write your custom code derives in turn from UserComponent. La classe UserComponent contiene i metodi seguenti:The UserComponent class contains the following methods:

  • Un'implementazione sottoposta a override del metodo ProcessInput.An overridden implementation of the ProcessInput method. Si tratta del metodo chiamato in fase di esecuzione dal motore flusso di dati dopo il metodo PreExecute 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 passa l'elaborazione al metodo <inputbuffer>_ProcessInput.ProcessInput hands off processing to the <inputbuffer>_ProcessInput method. Il metodo ProcessInput verifica quindi se è stata raggiunta la fine del buffer di input e, in caso affermativo, chiama il metodo FinishOutputs sottoponibile a override e il metodo MarkOutputsAsFinished privato.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 metodo 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 metodo <inputbuffer>_ProcessInput.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 metodo <inputbuffer>_ProcessInputRow.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

Per elaborare l'input nella classe ScriptMain è possibile usare i metodi seguenti:You can use the following methods to process input in the ScriptMain class:

  • Eseguire l'override di <inputbuffer>_ProcessInputRow per elaborare i dati in ogni riga di input non appena vengono passati.Override <inputbuffer>_ProcessInputRow to process the data in each input row as it passes through.

  • Eseguire l'override di <inputbuffer>_ProcessInput solo se è necessario eseguire operazioni aggiuntive mentre si esegue il ciclo delle righe di input,Override <inputbuffer>_ProcessInput only if you have to do something additional while looping through input rows. ad esempio se è necessario verificare la presenza di EndOfRowset per eseguire un'altra azione dopo l'elaborazione di tutte le righe. 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 di 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 metodo ProcessInput assicura che questi metodi vengano chiamati nel momento appropriato.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.

  • Una proprietà <column>_IsNull di sola scrittura per ogni colonna di output selezionata che è possibile usare 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 metodo AddRow per aggiungere una nuova riga vuota nel buffer di output.An AddRow method to add an empty new row to the output buffer.

  • Un metodo SetEndOfRowset per indicare al motore flusso di dati che non sono previsti altri buffer di dati.A SetEndOfRowset method to let the data flow engine know that no more buffers of data are expected. È inoltre disponibile una funzione EndOfRowset 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. Queste funzioni non sono in genere necessarie quando si usano i metodi di elaborazione dell'input implementati nella classe di base UserComponent.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. La classe ScriptMain in cui si scrive il codice personalizzato deriva a sua volta da UserComponent.The ScriptMain class in which you write your custom code derives in turn from UserComponent. La classe UserComponent contiene i metodi seguenti:The UserComponent class contains the following methods:

  • Un'implementazione sottoposta a override del metodo PrimeOutput.An overridden implementation of the PrimeOutput method. Il motore flusso di dati chiama questo metodo prima di 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 passa l'elaborazione al metodo CreateNewOutputRows.PrimeOutput hands off processing to the CreateNewOutputRows method. Quindi, se il componente è un'origine, ovvero non include input, PrimeOutput chiama il metodo FinishOutputs sottoponibile a override e il metodo MarkOutputsAsFinished privato.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 metodo MarkOutputsAsFinished chiama SetEndOfRowset sull'ultimo buffer di output.The MarkOutputsAsFinished method calls SetEndOfRowset on the last output buffer.

  • Un'implementazione sottoponibile a override del metodo CreateNewOutputRows.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

Per elaborare gli output nella classe ScriptMain è possibile usare i metodi seguenti:You can use the following methods to process outputs in the ScriptMain class:

  • Eseguire l'override di CreateNewOutputRows solo quando è possibile aggiungere e popolare le righe di output prima dell'elaborazione delle righe di input.Override CreateNewOutputRows only when you can add and populate output rows before processing input rows. Ad esempio, è possibile usare CreateNewOutputRows in un'origine, ma in una trasformazione con output asincroni è necessario chiamare AddRow durante o dopo l'elaborazione dei 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 di 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 metodo PrimeOutput assicura che questi metodi vengano chiamati nel momento appropriato.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. In un'origine, ad esempio, può essere opportuno chiudere l'oggetto System.Data.SqlClient.SqlDataReader usato 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 metodo PostExecute.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. Incrementare invece il valore di una variabile locale e impostare il valore della variabile del pacchetto sul valore della variabile locale nel metodo PostExecute dopo che tutti i dati sono stati elaborati.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 corrispondente Configuring the Script Component in the Script Component Editor
Codifica e debug del componente scriptCoding and Debugging the Script Component