2010-04-08 64 views

Respuesta

17

En la pestaña del script, asegúrese de poner la variable en los cuadros de texto readonlyvariables o readwritevariables.

Aquí hay un script simple que utilizo para formatear los errores en un flujo de datos (guardado en una variable RecordSet) en el cuerpo de un correo electrónico. Básicamente, leo el conjunto de registros varialbe en una tabla de datos y lo proceso fila por fila con los bucles for. Una vez completada esta tarea, examino el valor de uvErrorEmailNeeded para determinar si hay algo que enviar por correo electrónico utilizando un conector de flujo de proceso condicional. También deberá agregar una referencia a system.xml en su script vb. Esto es en SQL 2005.

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

enumera a continuación está el código que utiliza para cargar una tabla de datos en una tarea de secuencia de comandos de C# de una variable de conjunto de registros o de resultados. "Usuario :: transactionalRepDBs" es una variable SSIS de Object (System.Object) que se cargó mediante un "Conjunto de resultados completo" desde un script de ejecución de tarea 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

Una forma más fácil que encontré (usando C#) es simplemente echando el objeto como una matriz de cadenas. Así es como mi código C# se ve ahora:

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 
} 

... 
} 
Cuestiones relacionadas