SSIS脚本任务中C#实现三个行计数变量校验并报错
SSIS脚本任务C#代码修正:比较三个行计数变量
原代码问题分析
- 错误直接比较变量名字符串,而非变量存储的实际行计数值
- C#不支持
a == b == c这类连续比较语法 - 先清空变量值再比较,逻辑完全颠倒
- 未实现不相等时的错误抛出逻辑
修正后的完整代码
public void Main() { try { // 读取三个行计数变量的值,转换为整数(若变量是长整型,可改为long和Convert.ToInt64) int rowCount1 = Convert.ToInt32(Dts.Variables["User::RowCtn_src1"].Value); int rowCount2 = Convert.ToInt32(Dts.Variables["User::RowCtn_src2"].Value); int rowCount3 = Convert.ToInt32(Dts.Variables["User::RowCtn_src3"].Value); // 判断三个行计数是否完全相等 if (rowCount1 == rowCount2 && rowCount2 == rowCount3) { // 三者相等,标记任务成功并清空错误信息 Dts.TaskResult = (int)ScriptResults.Success; Dts.Variables["User::Err"].Value = ""; } else { // 三者不匹配,生成错误信息并抛出异常触发SSIS错误流程 string errorMsg = $"行计数不匹配:src1={rowCount1}, src2={rowCount2}, src3={rowCount3}"; Dts.Variables["User::Err"].Value = errorMsg; throw new Exception(errorMsg); // 若不需要抛出异常,也可直接标记任务失败: // Dts.TaskResult = (int)ScriptResults.Failure; } } catch (Exception ex) { // 捕获转换或其他异常,记录错误并标记任务失败 Dts.Variables["User::Err"].Value = $"执行错误:{ex.Message}"; Dts.TaskResult = (int)ScriptResults.Failure; } }
关键配置注意事项
- 把
User::RowCtn_src1、User::RowCtn_src2、User::RowCtn_src3添加到脚本任务的ReadOnlyVariables列表 - 若要修改
User::Err变量,需将其加入ReadWriteVariables列表
内容的提问来源于stack exchange,提问作者Lina
相关产品推荐
相关产品推荐

