2010-04-08 64 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 
} 

... 
}