Scrittura di codice e debug dell'attività ScriptCoding and Debugging the Script Task

Dopo aver configurato lo Script delle attività nella Editor attività Script, si scrive codice personalizzato nell'ambiente di sviluppo di attività Script.After configuring the Script task in the Script Task Editor, you write your custom code in the Script task development environment.

Ambiente di sviluppo dell'attività ScriptScript Task Development Environment

L'attività Script utilizza MicrosoftMicrosoft Visual StudioVisual Studio Tools for Applications (VSTA) come ambiente di sviluppo per lo script stesso.The Script task uses MicrosoftMicrosoft Visual StudioVisual Studio Tools for Applications (VSTA) as the development environment for the script itself.

Il codice di script viene scritto in MicrosoftMicrosoft Visual Basic o MicrosoftMicrosoft Visual C#.Script code is written in MicrosoftMicrosoft Visual Basic or MicrosoftMicrosoft Visual C#. Per specificare il linguaggio di scripting, impostare il ScriptLanguage proprietà il Editor attività Script.You specify the script language by setting the ScriptLanguage property in the Script Task Editor. Se si preferisce utilizzare un altro linguaggio di programmazione, è possibile sviluppare un assembly personalizzato nel linguaggio desiderato e chiamarne la funzionalità dal codice nell'attività Script.If you prefer to use another programming language, you can develop a custom assembly in your language of choice and call its functionality from the code in the Script task.

Lo script creato nell'attività Script viene archiviato nella definizione del pacchetto.The script that you create in the Script task is stored in the package definition. Non viene creato un file script separato.There is no separate script file. Pertanto, l'utilizzo dell'attività Script non ha effetto sulla distribuzione del pacchetto.Therefore, the use of the Script task does not affect package deployment.

Nota

Quando si progetta il pacchetto e si esegue il debug dello script, il codice di script viene scritto temporaneamente in un file di progetto.When you design the package and debug the script, the script code is temporarily written to a project file. Poiché l'archiviazione di informazioni riservate in un file costituisce un potenziale rischio per la sicurezza, è consigliabile non inserire nel codice di script informazioni di questo tipo, ad esempio le password.Because storing sensitive information in a file is a potential security risk, we recommend that you do not include sensitive information such as passwords in the script code.

Per impostazione predefinita, Option Strict è disabilitato nell'IDE.By default, Option Strict is disabled in the IDE.

Struttura di progetto dell'attività ScriptScript Task Project Structure

Quando si crea o si modifica lo script contenuto in un'attività Script, VSTA apre un nuovo progetto vuoto o riapre il progetto esistente.When you create or modify the script that is contained in a Script task, VSTA opens an empty new project or reopens the existing project. La creazione di questo progetto VSTA non influisce sulla distribuzione del pacchetto, perché il progetto viene salvato nel file del pacchetto; l'attività Script non crea file aggiuntivi.The creation of this VSTA project does not affect the deployment of the package, because the project is saved inside the package file; the Script task does not create additional files.

Elementi e classi del progetto dell'attività ScriptProject Items and Classes in the Script Task Project

Per impostazione predefinita, il progetto dell'attività Script visualizzato nella finestra Esplora progetti VSTA contiene un singolo elemento, la classe ScriptMain.By default, the Script task project displayed in the VSTA Project Explorer window contains a single item, ScriptMain. Il la classe ScriptMain elemento, a sua volta, contiene un'unica classe, denominata anche la classe ScriptMain.The ScriptMain item, in turn, contains a single class, also named ScriptMain. Gli elementi di codice nella classe variano a seconda del linguaggio di programmazione selezionato per l'attività Script:The code elements in the class vary depending on the programming language that you selected for the Script task:

  • Quando l'attività Script è configurato per il Visual Basic 2010Visual Basic 2010 linguaggio di programmazione il la classe ScriptMain classe dispone di una subroutine pubblica, Main.When the Script task is configured for the Visual Basic 2010Visual Basic 2010 programming language, the ScriptMain class has a public subroutine, Main. Il ScriptMain.Main subroutine è il metodo chiamato dal runtime quando si esegue l'attività Script.The ScriptMain.Main subroutine is the method that the runtime calls when you run your Script task.

    Per impostazione predefinita, l'unico codice nel Main subroutine di un nuovo script è la riga Dts.TaskResult = ScriptResults.Success.By default, the only code in the Main subroutine of a new script is the line Dts.TaskResult = ScriptResults.Success. Questa riga indica al runtime che l'operazione dell'attività è riuscita.This line informs the runtime that the task was successful in its operation. Il Dts.TaskResult verrà discusso proprietà restituzione di risultati dall'attività Script.The Dts.TaskResult property is discussed in Returning Results from the Script Task.

  • Quando l'attività Script è configurato per Visual c#, linguaggio di programmazione il la classe ScriptMain classe dispone di un metodo pubblico, Main.When the Script task is configured for the Visual C# programming language, the ScriptMain class has a public method, Main. Il metodo viene chiamato durante l'esecuzione dell'attività Script.The method is called when the Script task runs.

    Per impostazione predefinita, il Main metodo include la riga Dts.TaskResult = (int)ScriptResults.Success.By default, the Main method includes the line Dts.TaskResult = (int)ScriptResults.Success. Questa riga indica al runtime che l'operazione dell'attività è riuscita.This line informs the runtime that the task was successful in its operation.

    Il la classe ScriptMain elemento può contenere classi diverse di la classe ScriptMain classe.The ScriptMain item can contain classes other than the ScriptMain class. Le classi sono disponibili solo per l'attività Script in cui risiedono.Classes are available only to the Script task in which they reside.

    Per impostazione predefinita, il la classe ScriptMain elemento di progetto contiene il seguente codice generato automaticamente.By default, the ScriptMain project item contains the following autogenerated code. Nel modello del codice sono inoltre disponibili una panoramica dell'attività Script, nonché informazioni aggiuntive su come recuperare e modificare oggetti SSIS, quali variabili, eventi e connessioni.The code template also provides an overview of the Script task, and additional information on how to retrieve and manipulate SSIS objects, such as variables, events, and connections.

' Microsoft SQL Server Integration Services Script Task  
' Write scripts using Microsoft Visual Basic 2008.  
' The ScriptMain is the entry point class of the script.  

Imports System  
Imports System.Data  
Imports System.Math  
Imports Microsoft.SqlServer.Dts.Runtime.VSTAProxy  

<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _  
Partial Class ScriptMain  

Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup  

End Sub  

Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown  
Try  
' Unlock variables from the read-only and read-write variable collection properties  
If (Dts.Variables.Count <> 0) Then  
Dts.Variables.Unlock()  
End If  
Catch ex As Exception  
        End Try  
End Sub  

Enum ScriptResults  
Success = DTSExecResult.Success  
Failure = DTSExecResult.Failure  
End Enum  

' The execution engine calls this method when the task executes.  
' To access the object model, use the Dts property. Connections, variables, events,  
' and logging features are available as members of the Dts property as shown in the following examples.  
'  
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value  
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)  
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)  
'  
' To use the connections collection use something like the following:  
' ConnectionManager cm = Dts.Connections.Add("OLEDB")  
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"  
'  
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.  
'   
' To open Help, press F1.  

Public Sub Main()  
'  
' Add your code here  
'  
Dts.TaskResult = ScriptResults.Success  
End Sub  

End Class  
/*  
   Microsoft SQL Server Integration Services Script Task  
   Write scripts using Microsoft Visual C# 2008.  
   The ScriptMain is the entry point class of the script.  
*/  

using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Runtime.VSTAProxy;  
using System.Windows.Forms;  

namespace ST_1bcfdbad36d94f8ba9f23a10375abe53.csproj  
{  
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]  
    public partial class ScriptMain  
    {  
        private void ScriptMain_Startup(object sender, EventArgs e)  
        {  

        }  

        private void ScriptMain_Shutdown(object sender, EventArgs e)  
        {  
            try  
            {  
                // Unlock variables from the read-only and read-write variable collection properties  
                if (Dts.Variables.Count != 0)  
                {  
                    Dts.Variables.Unlock();  
                }  
            }  
            catch  
            {  
            }  
        }  

        #region VSTA generated code  
        private void InternalStartup()  
        {  
            this.Startup += new System.EventHandler(ScriptMain_Startup);  
            this.Shutdown += new System.EventHandler(ScriptMain_Shutdown);  
        }  
        enum ScriptResults  
        {  
            Success = DTSExecResult.Success,  
            Failure = DTSExecResult.Failure  
        };  

        #endregion  

        /*  
The execution engine calls this method when the task executes.  
To access the object model, use the Dts property. Connections, variables, events,  
and logging features are available as members of the Dts property as shown in the following examples.  

To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;  
To post a log entry, call Dts.Log("This is my log text", 999, null);  
To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);  

To use the connections collection use something like the following:  
ConnectionManager cm = Dts.Connections.Add("OLEDB");  
cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";  

Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.  

To open Help, press F1.  
*/  

        public void Main()  
        {  
            // TODO: Add your code here  
            Dts.TaskResult = (int)ScriptResults.Success;  
        }  
    }  

Altri elementi di progetto dell'attività ScriptAdditional Project Items in the Script Task Project

Il progetto dell'attività Script può includere elementi diverso da quello predefinito la classe ScriptMain elemento.The Script task project can include items other than the default ScriptMain item. È possibile aggiungere classi, moduli e file di codice al progetto.You can add classes, modules, and code files to the project. È anche possibile utilizzare cartelle per organizzare gruppi di elementi.You can also use folders to organize groups of items. Tutti gli elementi aggiunti vengono salvati in modo permanente nel pacchetto.All the items that you add are persisted inside the package.

Riferimenti nel progetto dell'attività ScriptReferences in the Script Task Project

È possibile aggiungere riferimenti agli assembly gestiti facendo clic con il progetto dell'attività Script in Esplora progettie quindi fare clic su Aggiungi riferimento.You can add references to managed assemblies by right-clicking the Script task project in Project Explorer, and then clicking Add Reference. Per ulteriori informazioni, vedere riferimento altri assembly nelle soluzioni di Scripting.For more information, see Referencing Other Assemblies in Scripting Solutions.

Nota

È possibile visualizzare i riferimenti al progetto nell'IDE di VSTA in Visualizzazione classi o in Esplora progetti.You can view project references in the VSTA IDE in Class View or in Project Explorer. Si apre una di queste finestre di vista menu.You open either of these windows from the View menu. È possibile aggiungere un nuovo riferimento dal progetto menu da Esplora progetti, o da Visualizzazione classi.You can add a new reference from the Project menu, from Project Explorer, or from Class View.

Interazione con il pacchetto nell'attività ScriptInteracting with the Package in the Script Task

L'attività Script utilizza globale Dts oggetto, ovvero un'istanza del ScriptObjectModel , classe e i relativi membri per interagire con il pacchetto contenitore e con il Integration ServicesIntegration Services runtime.The Script task uses the global Dts object, which is an instance of the ScriptObjectModel class, and its members to interact with the containing package and with the Integration ServicesIntegration Services runtime.

Nella tabella seguente sono elencati i principali membri pubblici del ScriptObjectModel (classe), che viene esposta al codice dell'attività Script tramite globale Dts oggetto.The following table lists the principal public members of the ScriptObjectModel class, which is exposed to Script task code through the global Dts object. Negli argomenti di questa sezione verrà descritto in maggior dettaglio l'utilizzo di questi membri.The topics in this section discuss the use of these members in more detail.

MembroMember ScopoPurpose
Connections Fornisce accesso alle gestioni connessioni definite nel pacchetto.Provides access to connection managers defined in the package.
Events Fornisce un'interfaccia degli eventi per consentire all'attività Script di generare errori, avvisi e messaggi informativi.Provides an events interface to let the Script task raise errors, warnings, and informational messages.
ExecutionValue Fornisce un modo semplice per restituire un oggetto per il runtime (oltre al TaskResult) che può essere utilizzato anche per la diramazione del flusso di lavoro.Provides a simple way to return a single object to the runtime (in addition to the TaskResult) that can also be used for workflow branching.
Log Registra informazioni quali lo stato e i risultati dell'attività nei provider di log abilitati.Logs information such as task progress and results to enabled log providers.
TaskResult Indica l'esito positivo o negativo dell'attività.Reports the success or failure of the task.
Transaction Fornisce la transazione, se presente, in cui è in esecuzione il contenitore dell'attività.Provides the transaction, if any, within which the task's container is running.
Variables Fornisce l'accesso alle variabili elencate nel ReadOnlyVariables e ReadWriteVariables attività proprietà per l'utilizzo all'interno dello script.Provides access to the variables listed in the ReadOnlyVariables and ReadWriteVariables task properties for use within the script.

La classe ScriptObjectModel contiene anche alcuni membri pubblici che probabilmente non verranno utilizzati.The ScriptObjectModel class also contains some public members that you will probably not use.

MembroMember DescriptionDescription
VariableDispenser La proprietà Variables fornisce un accesso più semplice alle variabili.The Variables property provides more convenient access to variables. Anche se è possibile utilizzare VariableDispenser, è necessario chiamare in modo esplicito i metodi per bloccare e sbloccare le variabili per la lettura e la scrittura.Although you can use the VariableDispenser, you must explicitly call methods to lock and unlock variables for reading and writing. L'attività Script gestisce automaticamente la semantica di blocco quando si utilizza la proprietà Variables.The Script task handles locking semantics for you when you use the Variables property.

Debug dell'attività ScriptDebugging the Script Task

Per eseguire il debug del codice nell'attività Script, impostare almeno un punto di interruzione nel codice, quindi chiudere l'IDE di VSTA per eseguire il pacchetto in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).To debug the code in your Script task, set at least one breakpoint in the code, and then close the VSTA IDE to run the package in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT). Quando l'esecuzione del pacchetto entra nell'attività Script, l'IDE di VSTA viene riaperto e visualizza il codice in modalità di sola lettura.When package execution enters the Script task, the VSTA IDE reopens and displays your code in read-only mode. Quando l'esecuzione raggiunge il punto di interruzione, è possibile esaminare i valori delle variabili e scorrere il codice rimanente.After execution reaches your breakpoint, you can examine variable values and step through the remaining code.

Avviso

È possibile eseguire il debug dell'attività Script quando si esegue il pacchetto in modalità a 64 bit.You can debug the Script task when you run the package in 64-bit mode.

Nota

È necessario eseguire il pacchetto da sottoporre a debug nell'attività Script.You must execute the package to debug into your Script task. Se si esegue solo la singola attività, i punti di interruzione nel codice dell'attività Script vengono ignorati.If you execute only the individual task, breakpoints in the Script task code are ignored.

Nota

Non è possibile eseguire il debug di un'attività Script se l'attività viene eseguita nell'ambito di un pacchetto figlio eseguito da un'attività Esegui pacchetto.You cannot debug a Script task when you run the Script task as part of a child package that is run from an Execute Package task. In tali circostanze, i punti di interruzione impostati all'interno dell'attività Script del pacchetto figlio verranno ignorati.Breakpoints that you set in the Script task in the child package are disregarded in these circumstances. È possibile eseguire il debug del pacchetto figlio normalmente eseguendolo separatamente.You can debug the child package normally by running it separately.

Nota

Quando si esegue il debug di un pacchetto che contiene più attività Script, il debugger è in grado di elaborarne solo una.When you debug a package that contains multiple Script tasks, the debugger debugs one Script task. Il sistema può eseguire il debug di un'altra attività Script se il debugger termina l'elaborazione, come nel caso di un contenitore Ciclo ForEach o Ciclo For.The system can debug another Script task if the debugger completes, as in the case of a Foreach Loop or For Loop container.

Risorse esterneExternal Resources

Vedere ancheSee Also

Riferimento ad altri assembly nelle soluzioni di Scripting Referencing Other Assemblies in Scripting Solutions
Configurazione dell'attività Script nell'Editor attività ScriptConfiguring the Script Task in the Script Task Editor