You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用集合优化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,提问作者이정훈

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:31