使用C#在脚本任务中锁定变量

时间:2015-02-27 18:53:01

标签: c# sql-server sql-server-2008 ssis

我正在运行一个SQL Server代理作业,该作业具有Microsoft Visual C#2008的脚本任务,如下所示:

public void Main()
{
        string filepath;
        filepath = Dts.Variables["User::FolderPath"].Value.ToString();
        Dts.Variables["User::FileExistsFlg"].Value = File.Exists(filepath);
        Dts.TaskResult = (int)ScriptResults.Success;
}

我收到此错误:

  

以用户身份执行:PSFACAMDWHSQL1 \ SYSTEM   Microsoft(R)SQL Server执行包实用程序
  版本10.50.4270.0适用于64位
  版权所有(C)Microsoft Corporation 2010.保留所有权利   开始时间:18:06:19
  错误:2015-02-27 18:07:44.95
  代码:0xC001404F
  来源:For Loop Container
  说明:此变量集合已解锁。 Unlock方法仅在已分配的Variables集合上调用一次。结束错误

     

DTExec:包执行返回DTSER_FAILURE(1)   开始时间:18:06:19
  完成时间:18:07:45
  经过时间:85.613秒   包执行失败。步骤失败了。

我不确定如何在脚本任务中解锁变量。

更新 我尝试过这种方法,但我遗漏了代码:

  public void Main()
    {


        // Lock variables
        Dts.VariableDispenser.LockForRead("User::FolderPath");
        Dts.VariableDispenser.LockForWrite("User::FileExistsFlg");

        // Create a variables 'container' to store variables
        Variables vars = null;

        // Add variables from the VariableDispenser to the variables 'container'
        Dts.VariableDispenser.GetVariables(ref vars);

        string filepath;
        filepath = Dts.Variables["User::FolderPath"].Value.ToString();
        Dts.Variables["User::FileExistsFlg"].Value = File.Exists(filepath);

        // Release the locks
        vars.Unlock();

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

1 个答案:

答案 0 :(得分:0)

尝试将您的bool转换为int。

Dts.Variables["User::FileExistsFlg"].Value = Convert.ToInt32(File.Exists(filepath));