代码之家  ›  专栏  ›  技术社区  ›  GordyII

ssis-如何访问脚本任务中的记录集变量

  •  20
  • GordyII  · 技术社区  · 16 年前

    如何在脚本任务中访问记录集变量?

    3 回复  |  直到 8 年前
        1
  •  18
  •   William Salzman    16 年前

    在“脚本”选项卡上,确保将变量放在readonlyvariables或readwritevariables文本框中。

    下面是一个简单的脚本,我使用它将数据流(保存在记录集变量中)中的错误格式化为电子邮件正文。基本上,我将记录集变量读入一个数据表,并用for循环逐行处理它。完成此任务后,我将检查uverroremailneeded的值,以确定是否有要使用条件流程流连接器发送电子邮件的内容。您还需要在vb脚本中添加对system.xml的引用。这是在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
    
        2
  •  21
  •   Tequila    13 年前

    下面列出的代码用于从记录集或结果集变量加载C脚本任务中的数据表。”user::transactionalrepdbs“是对象(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
    }
    
        3
  •  0
  •   Marcos    9 年前

    我找到的一个更简单的方法(使用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
     }
    
     ...
    }
    
    推荐文章