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

调用SqlParameter.Add/AddWithValue后获取生成SQL命令的方法咨询

可行实现方案

方案1:参数化批量插入(最推荐,无SQL注入风险,无需手动处理转义)

不要手动拼接SQL字符串,直接按分组生成参数化INSERT命令,每10条为一批执行,既解决单引号转义问题,也能保证执行效率:

const int BatchSize = 10;
// 假设你的数据集合为 List<Bina> binaList
for (int i = 0; i < binaList.Count; i += BatchSize)
{
    var currentBatch = binaList.Skip(i).Take(BatchSize).ToList();
    using var cmd = new SqlCommand();
    var valueSegments = new List<string>();
    int paramSuffix = 0;

    foreach (var bina in currentBatch)
    {
        // 每个参数加唯一后缀避免重复
        valueSegments.Add($"(@KurumKodu{paramSuffix},@KurumAdi{paramSuffix},@mahKodu{paramSuffix},@ParselID{paramSuffix},@AdaNo{paramSuffix},@ParselNo{paramSuffix},@ATZeminID{paramSuffix},@BagimsizBolumZeminRef{paramSuffix},@BagimsizBolumNo{paramSuffix},@Blok{paramSuffix},@Kat{paramSuffix},@BelgeID{paramSuffix},@BelgeTarih{paramSuffix},@BelgeSayi{paramSuffix},@BelgeKonu{paramSuffix},@BelgeAciklama{paramSuffix},@BelgeTipRef{paramSuffix},@BelgeTipAdi{paramSuffix},@DosyaAdi{paramSuffix},@durum{paramSuffix})");
        
        // 批量添加参数,空值自动转DBNull
        cmd.Parameters.AddWithValue($"@KurumKodu{paramSuffix}", bina.KurumKodu);
        cmd.Parameters.AddWithValue($"@KurumAdi{paramSuffix}", bina.KurumAdi ?? DBNull.Value);
        // 剩余所有字段按照上面的规则依次添加即可
        cmd.Parameters.AddWithValue($"@durum{paramSuffix}", (int)durum);
        
        paramSuffix++;
    }

    // 拼接完整SQL命令
    cmd.CommandText = $"INSERT INTO 你的表名 (KurumKodu,KurumAdi,mahKodu,ParselID,AdaNo,ParselNo,ATZeminID,BagimsizBolumZeminRef,BagimsizBolumNo,Blok,Kat,BelgeID,BelgeTarih,BelgeSayi,BelgeKonu,BelgeAciklama,BelgeTipRef,BelgeTipAdi,DosyaAdi,durum) VALUES {string.Join(",", valueSegments)}";
    cmd.Connection = 你的数据库连接对象;
    // 执行当前批次
    cmd.ExecuteNonQuery();
}

方案2:封装扩展方法实现你期望的GetCommand()逻辑

如果你需要直接拿到拼接完成的完整SQL(比如导出离线执行脚本),可以自行封装扩展方法,自动处理转义、类型适配逻辑,不需要每次手动写Replace:

第一步:编写扩展方法

public static class SqlCommandExtension
{
    public static string GetGeneratedSql(this SqlCommand cmd)
    {
        string resultSql = cmd.CommandText;
        foreach (SqlParameter param in cmd.Parameters)
        {
            string valueFormat;
            switch (param.SqlDbType)
            {
                // 字符串、日期类型自动加单引号、转义内部单引号
                case SqlDbType.VarChar:
                case SqlDbType.NVarChar:
                case SqlDbType.Text:
                case SqlDbType.DateTime:
                case SqlDbType.Date:
                    if (param.Value == DBNull.Value || param.Value == null)
                    {
                        valueFormat = "NULL";
                    }
                    else
                    {
                        valueFormat = $"'{param.Value.ToString().Replace("'", "''")}'";
                    }
                    break;
                // 数值、布尔类型不需要加单引号
                case SqlDbType.Int:
                case SqlDbType.BigInt:
                case SqlDbType.Decimal:
                case SqlDbType.Bit:
                    valueFormat = param.Value == DBNull.Value || param.Value == null ? "NULL" : param.Value.ToString();
                    break;
                default:
                    valueFormat = param.Value.ToString();
                    break;
            }
            resultSql = resultSql.Replace(param.ParameterName, valueFormat);
        }
        return resultSql;
    }
}

第二步:按你期望的方式调用

var cmd = new SqlCommand();
// 定义单条数据的SQL模板
cmd.CommandText = "(@KurumKodu,@KurumAdi,@mahKodu,@ParselID,@AdaNo,@ParselNo,@ATZeminID,@BagimsizBolumZeminRef,@BagimsizBolumNo,@Blok,@Kat,@BelgeID,@BelgeTarih,@BelgeSayi,@BelgeKonu,@BelgeAciklama,@BelgeTipRef,@BelgeTipAdi,@DosyaAdi,@durum)";
// 添加参数
cmd.Parameters.AddWithValue("@KurumKodu", bina.KurumKodu);
cmd.Parameters.AddWithValue("@KurumAdi", bina.KurumAdi);
// 剩余参数依次添加完成后调用扩展方法
string singleValueSql = cmd.GetGeneratedSql();
_csvalueslist += singleValueSql;

额外优化建议

如果单批次处理的数据量超过1000条,更推荐使用SqlBulkCopy类实现批量插入,执行效率比批量INSERT高3~10倍,只需要将你的数据集合转为DataTable后调用WriteToServer方法即可。

内容的提问来源于stack exchange,提问作者Alper Tarik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:15:01