c# – SSIS:创建文件夹的相同脚本.结果不同?
我有一个SSIS包,可以进行一些循环并动态创建目录.我有5个循环,所以我在每个循环中都有一个脚本副本.
这是我的第一个循环: #region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.IO; #endregion namespace ST_3b9dbb4827024d4ea9e1bcfe00118dcc { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { public void Main() { String OrderIDStr = Dts.Variables["User::OrderID"].Value.ToString(); String folderName = (string)Dts.Variables["User::FolderName"].Value + "Folder_T0_" + OrderIDStr; try { // Determine whether the directory exists. if (Directory.Exists(folderName)) { return; } // Try to create the directory. DirectoryInfo di = Directory.CreateDirectory(folderName); } catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.ToString(),"Process Failed"); } finally { } } } } 它很棒.然后进入第二个循环,其中包含以下内容(唯一的区别是设置folderName变量时T0与T1的关系: #region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.IO; #endregion namespace ST_3b9dbb4827024d4ea9e1bcfe00118dcc { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { public void Main() { String OrderIDStr = Dts.Variables["User::OrderID"].Value.ToString(); String folderName = (string)Dts.Variables["User::FolderName"].Value + "Folder_T1_" + OrderIDStr; try { // Determine whether the directory exists. if (Directory.Exists(folderName)) { return; } // Try to create the directory. DirectoryInfo di = Directory.CreateDirectory(folderName); } catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.ToString(),"Process Failed"); } finally { } } } } 当它运行时,它说任务成功,我没有得到任何错误弹出窗口.但是,该文件夹实际上并未创建,因此写入该文件夹的下一个任务当然会崩溃. 其他3个脚本运行正常,它只是这一个,踢球者是我跑了一个小时前它运行良好! 为了更好的衡量,我将代码从第一个复制到第二个.没运气. 我在这里真的很茫然.这没有意义! 任何帮助将不胜感激! 解决方法
您的脚本任务成功结束,因为您通过使用CATCH来抑制异常,而无需重新抛出或重定向到SSIS事件.
另一件事是你正在使用MessageBox.Show.将它放入生产时会破坏包的执行 因此,请考虑替换此代码: catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.ToString(),"Process Failed"); } 附: catch (Exception e) { Dts.Events.FireError(-1,"Task Name",e.message,String.Empty,0); Dts.TaskResult = (int)ScriptResults.Failure; } >真正的异常消息将传递给SSIS基础结构,包括日志,报告 作为一般设计提示,您可以在逻辑流中注入Dts.Events.FireInformation,以了解脚本任务中发生的事情或仅使用VS shell进行调试 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |