我有一个简单的SSIS包,上面有一个脚本任务。我有一个带有Send Mail任务的OnError事件。
我正在做的就是测试,看看当我检测到我的脚本出错时是否可以发送电子邮件。 但是,我用来保存电子邮件错误消息的变量会导致错误。
“尝试锁定变量”User :: errMsg“以进行读取访问时检测到死锁。”
这是一个非常简单的脚本
public void Main()
{
try
{
int x = 2;
if (x ==2)
{
throw new Exception("The number was 2");
}
Dts.TaskResult = (int)ScriptResults.Success;
}
catch(Exception e)
{
Dts.Variables["errMsg"].Value = e.Message;
Dts.Events.FireError(-1, "here", "my error", "", 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
如果我的脚本任务发生错误,如何将消息传递给我的发送电子邮件?
答案 0 :(得分:1)
SSIS变量为locked
,仅在其Post Execute event
中进行关联。在您的情况下,errMsg
变量被脚本任务锁定,同时在{{1}中访问变量} On Error event
组件创建SendMail
情况。在执行阶段其他组件访问变量之前,您需要具体deadlock
变量。
试试这个: -
unlock
这将确保在错误发生之前,变量已解锁,并且可以在 catch (Exception e)
{
Variables lockedVariables = null;
Dts.VariableDispenser.LockOneForWrite("errMsg", ref lockedVariables);
lockedVariables["errMsg"].Value = e.Message;
lockedVariables.Unlock();
Dts.Events.FireError(-1, "here", "my error", "", 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
或On Error
等执行事件中访问。