我尝试在ScriptTask中简单地更改SSIS变量的值:
string path = Dts.Connections["BazyPobrane"].ConnectionString.ToString();
string[] nameZIParray = Directory.GetFiles(path, "*.ZIP");
string[] nameRARarray = Directory.GetFiles(path, "*.RAR");
foreach (string nameZIP in nameZIParray) //search new ZIP
{
if (File.GetCreationTime(nameZIP) > DateTime.Now.AddDays(-1))
{
Dts.Variables["User::NazwaPliku"].Value = Path.GetFileName(nameZIP);
}
}
foreach (string nameRAR in nameRARarray) //search new RAR
{
if (File.GetCreationTime(nameRAR) > DateTime.Now.AddDays(-1))
{
Dts.Variables["User::NazwaPliku"].Value = Path.GetFileName(nameRAR);
}
}
Dts.TaskResult = (int)ScriptResults.Success;
执行ScriptTask之后,它根本不会更改变量Value。调试模式似乎很好。也许我想念一些组件设置? THX!
答案 0 :(得分:1)
要检查的一些事项:
您确定变量没有变化吗?如果您将后续脚本任务与MessageBox放在一起,它是否显示正确的值?
我认为您不需要变量类型,即删除“user ::”
确保变量位于ReadWriteVariables属性中,如@OcasoP
变量的范围是什么?确保您在不同的范围内没有两个副本,或者至少您 所拥有的副本在脚本范围内可见
您可以在写入变量之前尝试锁定变量(应该等同于上面的(3))
最后一点的代码示例:
IDTSVariables100 variables = null;
this.VariableDispenser.LockOneForWrite("NazwaPliku",ref variables);
variables[0].Value = myValue;
variables.Unlock();
答案 1 :(得分:0)
调试脚本任务添加MsgBox(variable_name)并通过执行查看其值。 最佳调试选项:)