声明和移动 c# 变量 SSIS

DECLARE and MOVE c# variables SSIS

谁能告诉我如何将 c# 脚本 SSIS 任务变量的值设置为包变量?示例:我们有 table 一列。在 sql 任务中,我们将其作为对象变量获取到完整的结果集。然后我们将这个包变量传递给脚本任务。在此之后我们进行一些数据操作:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.OleDb;

namespace ST_81cd1d2d439843b086cf3eb4d3b22d66.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

    #region VSTA generated code
    enum ScriptResults
    {
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    };
    #endregion



    public void Main()
    {
        OleDbDataAdapter A = new OleDbDataAdapter();
        DataTable dt = new DataTable();
        A.Fill(dt, Dts.Variables["User::i"].Value);

        int i;

        foreach (DataRow row in dt.Rows)
        {
            object[] array = row.ItemArray;
            i = (int)array[0];
            i += 1;
        }

        //Dts.TaskResult = (int)ScriptResults.Success;
    }
}
}

如何将脚本任务的变量移出到另一个 sql 任务以将数据插入 MS SQL 目标 table?我的意思是它应该是新的对象包变量还是我们第一个对象变量的所有列的新变量?如何正确地将完整数据集或所有变量的值从 c# 脚本任务移动到 sql 任务?

非常感谢。

是否有将对象转换为 DataTable 的功能?

    public void Main()
    {
        OleDbDataAdapter A = new OleDbDataAdapter();
        DataTable dt = new DataTable();

        A.Fill(dt, Dts.Variables["User::i"].Value);
        A = (DataTable)Dts.Variables["User::o"];

        int i;

        foreach (DataRow row in dt.Rows)
        {
            object[] array = row.ItemArray;
            i = (int)array[0];
            i += 1;
        }

        //Dts.TaskResult = (int)ScriptResults.Success;
    }

在脚本任务中实际创建的任何变量都不能"exported" 包变量。

做你想做的事情的正确方法是从两个包变量开始,一个用于脚本任务之前,一个用于脚本任务之后。由于您从 User::i 开始,我们将第二个称为 User::o("o" 代表 "out")。

您将像以前一样填充 User::i,并将 User::o 留空,将两个变量传递给脚本任务,但要确保 User::o 是一个 Read/Write 变量, 而不是只读的。

然后在您的脚本任务中,您可以使用 User::o 作为新数据表,而不是创建名为 dt 的新数据表,从 User::i 填充它,然后对其执行操作.

脚本任务完成后,包变量 User::o 将包含您想要的结果。