【发布时间】:2015-03-03 13:48:52
【问题描述】:
我已经问过这个问题,我以为我找到了解决方案,但我又被困住了。我遇到了解锁变量的问题。
我正在运行一个 SQL Server 代理作业,它有一个带有 Microsoft Visual C# 2008 的脚本任务,如下所示。我没有在脚本任务编辑器读/写变量列表中列出变量。在我的 SSIS 包中,我有 For Loop Container,它循环这个脚本任务,直到文件确实存在。
https://mitchellsql.wordpress.com/2014/09/06/ssis-script-taskdoes-file-exists/
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 = vars["User::FolderPath"].Value.ToString();
vars["User::FileExistsFlg"].Value = File.Exists(filepath);
// Release the locks
vars.Unlock();
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
错误
当 SQL 作业失败但包在通过 Visual Studio 运行时完美运行时出现此错误:
留言
以用户身份执行:PSFACAMDWHSQL1\SYSTEM。微软 (R) SQL Server 为 64 位执行包实用程序版本 10.50.4270.0 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始: 12:26:43 错误:2015-03-03 12:41:25.79 代码:0xC001404F
来源:For 循环容器描述:此变量集合 已经解锁。 Unlock 方法只在一次 分发变量集合。结束错误 DTExec:包 执行返回 DTSER_FAILURE (1)。开始时间:12:26:43 结束时间: 12:41:25 经过:881.921 秒。包执行失败。 步骤失败。
我将不胜感激。
【问题讨论】:
-
请确保您不会对变量范围感到困惑。您可以在不同的范围内拥有两个同名的变量,这会使事情变得混乱
-
@Nick 抱歉,我不确定我是否完全理解。
-
在本例中,msdn.microsoft.com/en-us/library/… 这两个变量首先是
LockForRead之前GetVariables被调用。这与您的代码不同。在拨打GetVariables之前尝试使用LockForWrite -
@Nick 只有一个变量是 LockforRead,第二个是 LockForWrite,两者都不是 LockforRead。不知道是不是我理解错了。
-
Lockforwhatever...您的代码与我发布的链接中的示例代码不同。该链接在
GetVariables之前进行了另外两个调用,您没有...查看我发布的链接中的代码并将其与您的进行比较。
标签: c# sql-server ssis ssis-2008