SSIS中的字符串变量未填充C#脚本中生成的值

时间:2018-09-20 22:55:27

标签: c# ssis

我有一个非常简单的要求,即从某个位置读取文件名并使用文件名填充变量。我正在为此任务使用脚本任务。无论我怎么尝试,变量中都不会填充文件名的值。

我正在使用脚本任务编辑器。只有一个ReadWriteVariables可以保存文件的全名。

这是我正在使用的脚本:

namespace ST_f8fd828f11b64932b15f2681e86c8d94
{
    using System;
    using System.Data;
    using System.IO;
    using Microsoft.SqlServer.Dts.Runtime;

    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
         public void Main()
        {

            string p = "C:\\Users\\nthaku01\\Desktop\\NewEXPOLD.txt";

            FileInfo fi = new FileInfo(p);
            String fileName = fi.FullName;
            Dts.Variables["User::vLastFilename"].Value = fileName.ToString();
            MessageBox.Show(Dts.Variables["User::vLastFilename"].Value.ToString());

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

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

    }
}

MessageBox显示文件的名称(和路径)。但是,该变量为空。

此问题也已在前面进行了详细讨论,我尝试了所有技巧。但是,它对我不起作用。请帮忙!

谢谢

Navneet

2 个答案:

答案 0 :(得分:0)

我能看到的脚本任务的唯一问题是已经为脚本定义了ScriptResults。我重命名了enum部分和枚举器,并且使用该变量将文本插入db表没有问题。这是我使用的脚本任​​务:

public void Main()
    {

        string p = "C:\\Users\\nthaku01\\Desktop\\NewEXPOLD.txt";

        FileInfo fi = new FileInfo(p);
        String fileName = fi.FullName;
        Dts.Variables["User::vLastFilename"].Value = fileName.ToString();
        MessageBox.Show(Dts.Variables["User::vLastFilename"].Value.ToString());

        Dts.TaskResult = (int)eScriptResults.enumSuccess;
    }

    enum eScriptResults
    {
        enumSuccess = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
        enumFailure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    };

答案 1 :(得分:0)

我解决了。

实际上,作为SSIS的新手,我不知道在运行时将值分配给变量的情况不会在变量窗口中显示。

在变量窗口中,仅显示设计时提到的值。我必须创建一个派生列,并将用户变量的值分配给这个新创建的派生列。这解决了我面临的问题。

在“派生”列转换中:

output_LastFileName <-用户:: vLastFilename