DataRow多列非空校验代码失效,寻求问题排查及解决
代码问题分析
你的代码核心问题是逻辑运算符使用错误:
- 需求是「所有指定列均非空时执行第一个分支,存在任意null值则执行else分支」,但你用了
||(逻辑或)——只要其中一列非空,整个条件就会判定为true,直接进入第一个分支,完全忽略其他列是否为null。 - 正确逻辑应该用
&&(逻辑与):只有当所有指定列都不等于DBNull.Value时,才进入第一个分支;反之只要有一列是null,就会触发else分支。
修正后的条件示例:
if (row["SAP_ID"] != DBNull.Value && row["CITY"] != DBNull.Value && row["FINAL_SR_DATE"] != DBNull.Value // 剩余列依次用&&连接 && row["APPLICABLE_SITE_RENT"] != DBNull.Value) { // 所有指定列非空时执行的逻辑 } else { // 存在null值时执行的逻辑 }
另外,为了提升代码可读性和维护性,建议把需要检查的列名存入数组,通过循环判断:
var requiredColumns = new[] { "SAP_ID", "CITY", "FINAL_SR_DATE", /* 其他需要检查的列名 */ }; bool allColumnsNonEmpty = true; foreach (var col in requiredColumns) { if (row[col] == DBNull.Value) { allColumnsNonEmpty = false; break; } } if (allColumnsNonEmpty) { // 所有指定列非空逻辑 } else { // 存在null值逻辑 }
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

