我正在运行一个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;
}
}
答案 0 :(得分:0)
尝试将您的bool转换为int。
Dts.Variables["User::FileExistsFlg"].Value = Convert.ToInt32(File.Exists(filepath));