共用方式為


比較腳本工作和腳本元件之間的差異

[腳本] 工作可在 Integration Services 設計工具的 [控制流程] 視窗中取得,而 [數據流] 視窗中提供的腳本元件在 Integration Services 套件中具有非常不同的用途。 工作是一般用途的控制流程工具,而元件則做為數據流中的來源、轉換或目的地。 不過,儘管其用途不同,但腳本工作和腳本元件在程式代碼撰寫工具中具有一些相似之處,而且它們提供給開發人員使用的套件中物件。 瞭解其相似性和差異,可協助您更有效地使用工作和元件。

腳本工作與腳本元件之間的相似性

腳本工作和腳本元件會共用下列常見功能。

特徵 / 功能 說明
兩種設計時間模式 在工作和元件中,您會從在編輯器中指定屬性開始,然後切換至開發環境以撰寫程序代碼。
Microsoft Visual Studio Tools for Applications (VSTA) 工作和元件都使用相同的 VSTA IDE,並支援 Microsoft在 Visual Basic 或 Microsoft Visual C# 中撰寫的程式代碼。
先行編譯的腳本 從 SQL Server 2008 Integration Services (SSIS) 開始,所有腳本都會先行編譯。 在舊版中,您可以指定是否先行編譯腳本。

腳本會先行編譯成二進位程序代碼,以加快執行速度,但代價是增加套件大小。
偵錯 / 除錯 工作和元件都支援斷點,並在設計環境中偵錯時逐步執行程序代碼。 如需詳細資訊,請參閱編寫 和偵錯腳本工作 和 [編寫腳本元件程式代碼和偵錯](.。/extending-packages-scripting/data-flow-script-component/coding-and-debug-the-script-component.md。

腳本工作與腳本元件之間的差異

腳本工作和腳本元件具有下列值得注意的差異。

特徵 / 功能 腳本任務 腳本元件
控制流程/數據流 腳本工作是在設計工具的 [控制流程] 索引標籤上設定,並在封裝的數據流外執行。 腳本元件是在設計工具的 [數據流] 頁面上設定,並代表數據流工作中的來源、轉換或目的地。
目標 腳本工作幾乎可以完成任何一般用途的工作。 您必須指定是否要使用文稿元件建立來源、轉換或目的地。
執行 腳本工作會在封裝工作流程中的某個時間點執行自定義程序代碼。 除非您將它放在迴圈容器或事件處理程式中,否則它只會執行一次。 腳本元件也會執行一次,但通常會針對數據流中的每個數據列執行其主要處理例程一次。
編輯器 腳本工作編輯器有三個頁面:一般腳本表達式ReadOnlyVariables只有和 ReadWriteVariablesScriptLanguage 屬性會直接影響您可以撰寫的程式代碼。 文稿轉換編輯器最多有四個頁面:輸入數據行輸入和輸出腳本連接管理器。 您在每一個頁面上設定的元數據和屬性會決定自動產生的基類成員,以供編碼使用。
與套件互動 在針對腳本工作撰寫的程式代碼中,您會使用 Dts 屬性來存取封裝的其他功能。 屬性 Dts 是 類別的成員 ScriptMain 在腳本元件程式代碼中,您可以使用具類型的存取子屬性來存取某些套件功能,例如變數和連接管理員。

方法 PreExecute 只能存取唯讀變數。 方法 PostExecute 可以存取唯讀和讀取/寫入變數。

如需這些方法的詳細資訊,請參閱 [編寫程式代碼和偵錯腳本元件](.。/extending-packages-scripting/data-flow-script-component/coding-and-debug-the-script-component.md。
使用變數 腳本工作會使用 Variables 物件的 屬性Dts來存取可透過工作 和 ReadWriteVariables 屬性取得的ReadOnlyVariables變數。 例如:

[VB]

Dim myVar as String myVar = Dts.Variables("MyStringVariable").Value.ToString



[C#]

string myVar; myVar = Dts.Variables["MyStringVariable"].Value.ToString();
腳本元件會使用從元件的 和 ReadWriteVariables 屬性建立之自動產生型別類別的ReadOnlyVariables具型別存取子屬性。 例如:

[VB]

Dim myVar as String myVar = Me.Variables.MyStringVariable



[C#]

string myVar; myVar = this.Variables.MyStringVariable;
使用連線 腳本工作會使用 Connections 物件的 屬性 Dts 來存取封裝中定義的連接管理員。 例如:

[VB]

Dim myFlatFileConnection As String myFlatFileConnection = _ DirectCast(Dts.Connections("Test Flat File Connection").AcquireConnection(Dts.Transaction), _ String)



[C#]

string myFlatFileConnection; myFlatFileConnection = (Dts.Connections["Test Flat File Connection"].AcquireConnection(Dts.Transaction) as String);
腳本元件會使用自動產生基類的具型別存取子屬性,此屬性是從編輯器的 [連接管理器] 頁面上使用者輸入的連接管理員清單所建立。 例如:

[VB]

Dim connMgr As IDTSConnectionManager100 connMgr = Me.Connections.MyADONETConnection



[C#]

IDTSConnectionManager100 connMgr; connMgr = this.Connections.MyADONETConnection;
引發事件 腳本工作會使用 Events 物件的 屬性 Dts 來引發事件。 例如:

[VB]

Dts.Events.FireError(0, "Event Snippet", _ ex.Message & ControlChars.CrLf & ex.StackTrace, _ "", 0)



[C#]

Dts.Events.FireError(0, "Event Snippet", ex.Message + "\r" + ex.StackTrace, "", 0);
腳本元件會使用 屬性所ComponentMetaData傳回之介面的方法IDTSComponentMetaData100,引發錯誤、警告和參考訊息。 例如:

[VB]

Dim myMetadata as IDTSComponentMetaData100 myMetaData = Me.ComponentMetaData myMetaData.FireError(...)
森林伐木業 腳本工作會使用 Log 物件的 方法 Dts ,將資訊記錄到啟用的記錄提供者。 例如:

[VB]

Dim bt(0) As Byte Dts.Log("Test Log Event", _ 0, _ bt)



[C#]

byte[] bt = new byte[0]; Dts.Log("Test Log Event", 0, bt);
腳本元件會使用 Log 自動產生的基類 方法,將資訊記錄到啟用的記錄提供者。 例如:

[VB]

Dim bt(0) As Byte

Me.Log("Test Log Event", _

0, _

bt)



[C#]

byte[] bt = new byte[0]; this.Log("Test Log Event", 0, bt);
返回結果 腳本工作會同時使用 TaskResult 對象的 屬性和選擇性 ExecutionValue 屬性 Dts ,通知運行時間其結果。 腳本元件會以數據流工作的一部分執行,而且不會使用這些屬性之一來報告結果。

另請參閱

使用腳本工作擴充封裝
使用腳本元件擴充數據流
在 SQL Server Integration Services SSIS 中使用腳本工作連線至 Web 服務