2010-04-08 32 views

Trả lời

17

Trên tab tập lệnh, hãy đảm bảo bạn đặt biến trong hộp văn bản readonlyvariables hoặc readwritevariables.

Đây là một kịch bản đơn giản mà tôi sử dụng để định dạng các lỗi trong luồng dữ liệu (được lưu trong Biến RecordSet) vào phần thân của email. Về cơ bản tôi đọc varialbe recordset vào một datatable và xử lý nó theo từng hàng với các vòng lặp. Sau khi nhiệm vụ này hoàn thành, tôi kiểm tra giá trị của uvErrorEmailNeeded để xác định xem có bất cứ điều gì để gửi email bằng cách sử dụng một trình kết nối luồng xử lý có điều kiện hay không. Bạn cũng sẽ cần phải thêm một tham chiếu đến system.xml trong tập lệnh vb của bạn. Đây là trong 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

Dưới đây là mã tôi dùng để tải dữ liệu trong tác vụ C# script từ biến recordset hoặc resultset. "User :: transactionalRepDBs" là một biến SSIS của Object (System.Object) đã được tải thông qua một "tập hợp kết quả đầy đủ" từ một kịch bản lệnh thực thi 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

Một cách dễ dàng hơn tôi phát hiện (sử dụng C#) chỉ đơn giản là đúc các đối tượng như là một mảng chuỗi. Đây là cách mã C# của tôi trông như sau:

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 
} 

... 
} 
Các vấn đề liên quan