2010-04-08 107 views

回答

17

在腳本選項卡上,確保將變量放在readonlyvariables或readwritevariables文本框中。

這是一個簡單的腳本,我用它來格式化數據流中的錯誤(保存在RecordSet變量中)到電子郵件的正文中。基本上我將記錄集varialbe讀入一個數據表,並用for循環逐行處理它。完成此任務後,我將檢查uvErrorEmailNeeded的值,以確定是否有任何內容需要使用條件流程流連接器進行電子郵件發送。您還需要在您的vb腳本中添加對system.xml的引用。這是在2005年SQL

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Runtime 
Imports System.Xml 
Imports System.Data.OleDb 


Public Class ScriptMain 


    Public Sub Main() 


     Dim oleDA As New OleDbDataAdapter 
     Dim dt As New DataTable 
     Dim col As DataColumn 
     Dim row As DataRow 
     Dim sMsg As String 
     Dim sHeader As String 


     oleDA.Fill(dt, Dts.Variables("uvErrorTable").Value) 
     If dt.Rows.Count > 0 Then 
      Dts.Variables("uvErrorEmailNeeded").Value = True 
      For Each col In dt.Columns 
       sHeader = sHeader & col.ColumnName & vbTab 
      Next 
      sHeader = sHeader & vbCrLf 
      For Each row In dt.Rows 
       For Each col In dt.Columns 
        sMsg = sMsg & row(col.Ordinal).ToString & vbTab 
       Next 
       sMsg = sMsg & vbCrLf 
      Next 
      Dts.Variables("uvMessageBody").Value = "Error task. Error list follows:" & vbCrLf & sHeader & sMsg & vbCrLf & vbCrLf 
     End If 

     Dts.TaskResult = Dts.Results.Success 
    End Sub 

End Class 
17

下面列出的是我使用了從記錄或結果集變量一個C#腳本任務加載數據表的代碼。 「User :: transactionalRepDBs」是Object(System.Object)的一個SSIS變量,通過執行SQL任務腳本通過「完整結果集」加載。 This link assisted me.

using System.Data.OleDb; 

DataTable dt= new DataTable(); 
OleDbDataAdapter adapter = new OleDbDataAdapter(); 
adapter.Fill(dt, Dts.Variables["User::transactionalRepDBs"].Value); 

foreach (DataRow row in dt.Rows) 
{ 
    //insert what you want to do here 
} 
0

一個簡單的方法,我發現(使用C#)被簡單地鑄造對象作爲一個字符串數組。這就是我的C#代碼現在的樣子:

public void Main() 
{ 
string[] arreglo = (string[])Dts.Variables["User::arreglo"].Value; 

... 

foreach (string elemento in arreglo) 
{ 
    // do stuff on each element of the array/collection 
} 

... 
}