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

控制台程序数据库插入报错Error Number:134,State:1,Class:15求助

解决控制台应用循环插入数据库的参数重复问题

我之前在控制台应用里开发数据生成并插入数据库的功能,一开始单行数据插入完全正常,但放到while循环里批量生成插入时就遇到了参数冲突的问题。

问题场景还原

最开始的代码大概是这样的(模拟我的实现逻辑):

using (var conn = new SqlConnection(connectionString))
{
    conn.Open();
    var cmd = new SqlCommand("INSERT INTO MyTable (Col1, Col2) VALUES (@Col1, @Col2)", conn);
    int count = 0;
    while (count < 10)
    {
        // 生成随机数据
        var col1Value = $"Data_{count}";
        var col2Value = count * 10;
        // 直接添加参数
        cmd.Parameters.AddWithValue("@Col1", col1Value);
        cmd.Parameters.AddWithValue("@Col2", col2Value);
        // 执行插入
        cmd.ExecuteNonQuery();
        count++;
    }
}

这段代码运行时会抛出参数重复的异常——因为每次循环都往cmd.Parameters集合里追加新参数,导致同一个参数名被重复添加,数据库无法识别。

最终解决方法

后来我尝试在每次循环开始前清空参数集合,用cmd.Parameters.Clear()方法完美解决了问题:

using (var conn = new SqlConnection(connectionString))
{
    conn.Open();
    var cmd = new SqlCommand("INSERT INTO MyTable (Col1, Col2) VALUES (@Col1, @Col2)", conn);
    int count = 0;
    while (count < 10)
    {
        // 关键步骤:每次循环先清空参数集合
        cmd.Parameters.Clear();
        // 生成随机数据
        var col1Value = $"Data_{count}";
        var col2Value = count * 10;
        // 添加参数
        cmd.Parameters.AddWithValue("@Col1", col1Value);
        cmd.Parameters.AddWithValue("@Col2", col2Value);
        // 执行插入
        cmd.ExecuteNonQuery();
        count++;
    }
}

这样每次循环都会重置参数集合,不会出现重复参数的问题,批量插入功能完全正常运行了。

额外优化方案

如果追求更高的性能,还可以预先定义好参数,每次循环只更新参数的值,避免反复清空和创建参数的开销:

using (var conn = new SqlConnection(connectionString))
{
    conn.Open();
    var cmd = new SqlCommand("INSERT INTO MyTable (Col1, Col2) VALUES (@Col1, @Col2)", conn);
    // 预先定义参数类型和名称
    cmd.Parameters.Add("@Col1", SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@Col2", SqlDbType.Int);
    int count = 0;
    while (count < 10)
    {
        // 直接更新参数值
        cmd.Parameters["@Col1"].Value = $"Data_{count}";
        cmd.Parameters["@Col2"].Value = count * 10;
        // 执行插入
        cmd.ExecuteNonQuery();
        count++;
    }
}

这种方式减少了参数对象的频繁创建和销毁,在大批量数据插入时能提升不少效率。


内容的提问来源于stack exchange,提问作者Valentin Kohler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:37