2010-04-08 7 views

Répondre

17

Dans l'onglet Script, veillez à placer la variable dans les zones de texte readonlyvariables ou readwritevariables.

Voici un script simple que j'utilise pour formater les erreurs dans un flux de données (enregistré dans une variable RecordSet) dans le corps d'un e-mail. Fondamentalement, j'ai lu le jeu d'enregistrements varialbe dans un datatable et le traiter ligne par ligne avec les boucles for. Une fois cette tâche terminée, j'examine la valeur de uvErrorEmailNeeded pour déterminer s'il y a quoi que ce soit à envoyer par courrier électronique en utilisant un connecteur de flux de processus conditionnel. Vous devrez également ajouter une référence à system.xml dans votre script vb. Ceci est 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

Ci-dessous est le code que je chargeais une datatable dans une tâche de script C# à partir d'une variable ou recordset ResultSet. "User :: transactionalRepDBs" est une variable SSIS de Object (System.Object) qui a été chargée via un "jeu de résultats complet" à partir d'un script de tâche SQL d'exécution. 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

Un moyen plus facile je trouve (en C#) est simplement coulée de l'objet comme un tableau de chaînes. Voici à quoi ressemble mon code 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 
} 

... 
} 
Questions connexes