Comparing the Script Task and the Script Component

The Script task, available in the Control Flow window of the Integration Services designer, and the Script component, available in the Data Flow window, have very different purposes within an Integration Services package. The task is a general-purpose control flow tool, whereas the component serves as a source, transformation, or destination within the data flow. Despite their different purposes, however, the Script task and the Script component have some similarities in the coding tools that they use and the objects in the package that they make available to the developer. Understanding their similarities and differences may help you to use both the task and the component more effectively.

Similarities between the Script Task and the Script Component

The Script task and the Script component share the following common features.

Feature Description

Two design-time modes

In both the task and the component, you begin by specifying properties in the editor, and then switch to the development environment to write code.

Visual Studio for Applications (VSA) code development environment

Both the task and the component use the same VSA IDE and the Visual Basic .NET programming language.

Scripts can be precompiled

Both the task and the component have a Boolean property, always True by default, that lets you specify that the script should be precompiled into binary code, permitting faster execution, but at the cost of increased package size.

Differences between the Script Task and the Script Component

The Script task and the Script component have the following noteworthy differences.

Feature Script Task Script Component

Control flow / Data flow

The Script task is configured on the Control Flow tab of the designer and runs outside the data flow of the package.

The Script component is configured on the Data Flow page of the designer and represents a source, transformation, or destination within the Data Flow task.

Purpose

A Script task can accomplish almost any general-purpose task.

You must specify whether you want to create a source, transformation, or destination with the Script component.

Execution

A Script task runs custom code at some point in the package workflow. Unless you place it in a loop container or an event handler, it only runs once.

A Script component also runs once, but normally it runs its main processing routine once for each row of data in the data flow.

Editor

The Script Task Editor has 3 pages: General, Script, and Expressions. Only the ReadOnlyVariables and ReadWriteVariables properties directly affect the code that you can write.

The Script Transformation Editor has up to four pages: Input Columns, Inputs and Outputs, Script, and Connection Managers. The metadata and properties that you configure on each of these pages determines the members of the base classes that are autogenerated for your use in coding.

Interaction with the package

In Script task code, you use the global Dts object to access other features of the package.

In Script component code, you use typed accessor properties to access certain package features such as variables and connection managers.

Using variables

The Script task uses the Variables property of the Dts object to access variables that are available through the task’s ReadOnlyVariables and ReadWriteVariables properties. For example:

Dim myVar as String

myVar = Dts.Variables(“MyStringVariable”).Value.ToString

The Script component uses typed accessor properties of the autogenerated based class, created from the component’s ReadOnlyVariables and ReadWriteVariables properties. For example:

Dim myVar as String

myVar = Me.Variables.MyStringVariable

Using connections

The Script task uses the Connections property of the Dts object to access connection managers defined in the package. For example:

Dim myFlatFileConnection As String

myFlatFileConnection = _

DirectCast(Dts.Connections("Test Flat File Connection").AcquireConnection(Dts.Transaction), _

String)

The Script component uses typed accessor properties of the autogenerated base class, created from the list of connection managers entered by the user on the Connection Managers page of the editor. For example:

Dim connMgr As IDTSConnectionManager90

connMgr = Me.Connections.MyADONETConnection

Raising events

The Script task uses the Events property of the Dts object to raise events. For example:

Dts.Events.FireError(0, "Event Snippet", _

ex.Message & ControlChars.CrLf & ex.StackTrace, _

"", 0)

The Script component raises errors, warnings, and informational messages by using the methods of the IDTSComponentMetaData90 interface returned by the ComponentMetaData property. For example:

Dim myMetadata as IDTSComponentMetaData90

myMetaData = Me.ComponentMetaData

myMetaData.FireError(...)

Logging

The Script task uses the Log method of the Dts object to log information to enabled log providers. For example:

Dim bt(0) As Byte

Dts.Log("Test Log Event", _

0, _

bt)

The Script task uses the Log method of the autogenerated base class to log information to enabled log providers. For example:

Dim bt(0) As Byte

Me.Log("Test Log Event", _

0, _

bt)

Returning results

The Script task uses both the TaskResult property and the optional ExecutionValue property of the Dts object to notify the runtime of its results.

The Script component runs as a part of the Data Flow task and does not report results using either of these properties.

Debugging

The Script task supports breakpoints and stepping through code while debugging in the design environment.

The Script component does not support debugging. For more information, see "Debugging the Script Component" in Coding and Debugging the Script Component.

See Also

Reference

Extending the Package with the Script Task

Other Resources

Extending the Data Flow with the Script Component

Help and Information

Getting SQL Server 2005 Assistance