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

列数正确却报SQL错误110?插入SQL Server数据时列值不匹配如何解决

问题原因

  • 核心触发点是数值格式的区域适配问题:Preis为数值类型,当程序运行环境的区域设置使用逗号作为小数分隔符时,{artikel.Preis} 字符串拼接后会生成类似9,99的格式,SQL会将其识别为两个独立的值,导致VALUES子句的值总数从4个变为5个,和INSERT语句指定的4个列不匹配,触发报错。
  • 额外存在的其他隐患:字符串拼接SQL存在SQL注入风险,若Name字段内容包含单引号时也会触发SQL语法错误。

修复方案

改用参数化查询,完全规避字符串拼接带来的各类问题:

第一步:修改ExecuteSQL方法支持传入参数

private static void ExecuteSQL(string sqlText, params SqlParameter[] parameters)
{
    using (SqlConnection connection = Init())
    {
        SqlCommand sqlCommand = new SqlCommand(sqlText, connection);
        if (parameters != null)
        {
            sqlCommand.Parameters.AddRange(parameters);
        }
        sqlCommand.ExecuteNonQuery();
    }
}

注:增加using块保证数据库连接正常释放,避免连接泄漏。

第二步:修改Add方法使用参数化查询

public static void Add(Artikel artikel)
{
    string sql = @"INSERT INTO [dbo].[Artikel] ([Id], [Name], [Preis], [Kategorie]) 
                   VALUES (@Id, @Name, @Preis, @KategorieId)";
    ExecuteSQL(sql,
        new SqlParameter("@Id", artikel.ID),
        new SqlParameter("@Name", artikel.Name),
        new SqlParameter("@Preis", artikel.Preis),
        new SqlParameter("@KategorieId", artikel.Kategorie.ID)
    );
}

说明:如果Artikel表的Id字段是自增主键(IDENTITY),可直接移除INSERT语句中的Id列和对应参数,不需要手动插入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:09:03