【问题标题】:How can I store a dataset object into a package variable of data type object?如何将数据集对象存储到数据类型对象的包变量中?
【发布时间】:2026-01-11 05:55:02
【问题描述】:

如何将数据集对象存储到数据类型 Object 的包变量中,然后在脚本任务中将其分配回另一个数据集对象?

【问题讨论】:

  • Sreejesh,我用您正在寻找的另一面更新了我的答案。
  • 您是指 SSIS 还是 DTS?哪个版本?
  • 是的,威廉。但我的问题是如何将数据集或数据表对象存储到 SSIS 变量中
  • 好的,我向您展示了在脚本任务中从数据集变量读取的代码示例,我还向您展示了在脚本任务中写入数据集变量的代码示例,我还提到您可以使用记录集目标从数据流任务写入数据集变量。我遗漏了你问的问题的哪一部分?

标签: ssis


【解决方案1】:

这是我之前回答的代码示例。它显示了如何在脚本任务中从对象变量填充 OleDB 数据适配器。您可以使用数据流任务中的记录集目标将记录集存储到对象变量中。
How to access a Recordset Variable inside a Script Task

为了进一步扩展我在其他答案中在脚本中所做的工作,如果您已操作对象变量中的行并希望将新结果保存到对象变量中以供进一步处理,您可以在接近尾声时执行以下操作你的过程。 Dts.Variables("rsRecipients").Value = dt

这方面的一个例子位于:Update SSIS Object Variable Used In Foreach Conainer From Script Task
示例 #2 中的代码:

Public Sub Main()
Dim Header As String
Dim Body As String
Dim Footer As String
Header = "blah"

Footer = "blah"

Try
    Dim olead As New Data.OleDb.OleDbDataAdapter
    Dim dt As New Data.DataTable
    olead.Fill(dt, Dts.Variables("rsRecipients").Value)

    For Each row As Data.DataRow In dt.Rows
        If UCase(Trim(row("EmployeeCode").ToString())) = UCase(Trim(Dts.Variables("colEmployeeCode").Value.ToString())) Then
            Body = Body + "Label: " + Trim(row("colum").ToString()) + System.Environment.NewLine
            row.Delete()
        End If
    Next
    Dts.Variables("rsRecipients").Value = dt
    Dts.Variables("EmailMessage").Value = Header + Body + Footer
    Dts.TaskResult = Dts.Results.Success
Catch ex As Exception
    Dts.TaskResult = Dts.Results.Failure
End Try

结束子

olead.Fill(dt, Dts.Variables("rsRecipients").Value) 行从记录集变量中读取。 Dts.Variables("rsRecipients").Value = dt 行将数据集写回一个变量(在这种情况下是同一个变量,但是如果您愿意,您可以将其写入另一个变量)。将数据集加载到对象变量中的其他方法包括在数据流任务中使用记录集目标,或使用 sql 任务并通过在对话框中的结果集字段上选择完整结果集将完整结果集设置为变量,然后设置输出到对象类型的变量。

【讨论】:

  • 但是威廉,你如何将数据集/数据表对象存储到脚本任务中的变量中?
  • Dts.Variables("VariableName").Value = dt 其中 dt 是脚本任务中的数据表,其中已加载数据,可以通过 .Fill 操作或通过使用数据表手动添加行api的。