我有一个相当简单的要求,即从一个位置读取文件名并用文件名填充变量。我正在为此任务使用脚本任务。无论我尝试什么,文件名的值都不会填充在变量中。
我正在使用脚本任务编辑器。只有一个 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
}
}
消息框显示文件的名称(和路径(。但是,该变量为空。
这个问题之前也详细讨论过,我尝试了所有技巧。但是,它对我不起作用。请帮忙!!
谢谢
纳夫尼特
我可以看到您的脚本任务的唯一问题是已经为脚本定义了ScriptResults
。我重命名了您的enum
部分和枚举器,并且使用变量将文本插入数据库表没有问题。这是我使用的脚本任务:
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
};
我解决了。
实际上,作为SSIS新手,我不知道在运行时分配给变量的值不会显示在变量窗口中。
在变量窗口中,仅显示设计时提到的值。我必须创建一个派生列,并将用户变量的值分配给这个新创建的派生列。这解决了我面临的问题。
在"派生"列转换中:
output_LastFileName<-- 用户::vLast文件名