如何用集合优化70行数据批量插入数据库的冗余代码?
精简存储过程调用代码的方案
完全可以通过集合类型(如List<string>或数组)重构代码,消除大量重复的参数定义逻辑,大幅降低冗余度。以下是具体实现方案:
1. 重构方法逻辑
将原方法的77个单个参数替换为集合参数,通过循环自动生成存储过程所需的SqlParameter:
private int Execute_NonQuery(IEnumerable<string> paramValues) { int result = (int)ExcuteResult.Fail; try { _sqlCmd = new SqlCommand("INSERTCSV_S", this.Connection); _sqlCmd.CommandType = CommandType.StoredProcedure; // 循环生成@P01到@P77的参数 int paramNum = 1; foreach (var value in paramValues) { // 格式化参数名,确保是两位序号(如P01、P02) string paramName = $"@P{paramNum:D2}"; // 处理空值,避免数据库接收null报错 _sqlCmd.Parameters.Add(new SqlParameter(paramName, value ?? DBNull.Value)); paramNum++; } // 若传入的参数数量不足77个,补充默认空值(可根据业务调整为其他默认值) while (paramNum <= 77) { string paramName = $"@P{paramNum:D2}"; _sqlCmd.Parameters.Add(new SqlParameter(paramName, DBNull.Value)); paramNum++; } result = _sqlCmd.ExecuteNonQuery(); } catch (Exception ex) { string msg = string.Format("{0}\r\nMessage : {1}", ex.StackTrace, ex.Message); MessageBox.Show(msg); if (!CheckConnection()) { return result; } } return result; }
2. 调用方式
调用时只需将77个参数值打包为集合传入即可,示例如下:
// 构造参数集合(按@P01到@P77的顺序放入对应值) var values = new List<string> { "2024-05-20", "LEVEL1", "EQ001", ... , "最后一个参数值" }; int insertResult = Execute_NonQuery(values);
3. 额外优化建议
- 参数校验:可在方法开头添加集合数量校验,避免传入参数过多或过少:
if (paramValues == null || paramValues.Count() > 77) { throw new ArgumentException("参数数量不能超过77个"); } - 对象复用:如果频繁调用该方法,可复用
SqlCommand对象,减少重复创建开销。
内容的提问来源于stack exchange,提问作者이정훈
相关产品推荐
相关产品推荐

