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

ASP.NET中Post方法执行INSERT语句时出现VALUES子句值数量与指定列数不匹配的错误排查

问题分析与解决方案

你遇到的这个错误完全是因为INSERT语句的VALUES子句格式错误,还附带一个参数拼写问题,我来帮你一步步修正:

核心错误点1:VALUES子句的括号使用错误

你的原SQL语句里,VALUES后面把每个参数都单独用括号括起来了:

values (@ObjektiMeQiraEmri), (@LLojiObjektit), (@Siperfaqe), (@NumriIDHomave), (@Kati), (@Cmimi), (@Vendndodhja), (@Qyteti), (@Shteti)

这种写法会被SQL Server解析成9个独立的单行插入请求,每个行只包含1个值,但你前面明确指定了9列,自然会触发“值数量与列数不匹配”的错误。正确的写法是把所有参数放在同一个括号内,用逗号分隔。

次要错误点2:参数名拼写错误

你在SQL里写了@LLojiObjektit(两个L),但后面绑定参数时用的是@LlojiObjektit(一个L),这会导致参数绑定失败,也是潜在的问题,必须一起修正。

修正后的完整Post方法代码

[HttpPost]
public JsonResult Post(ObjektiMeQira omq) {
    // 修正SQL的VALUES格式,同时修正参数拼写错误
    string query = @" insert into dbo.ObjektiMeQira(ObjektiMeQiraEmri,LlojiObjektit,Siperfaqe, NumriIDHomave, Kati, Cmimi, Vendndodhja, Qyteti, Shteti) 
                      values (@ObjektiMeQiraEmri, @LlojiObjektit, @Siperfaqe, @NumriIDHomave, @Kati, @Cmimi, @Vendndodhja, @Qyteti, @Shteti) ";
    string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
    
    using (SqlConnection myCon = new SqlConnection(sqlDataSource)) {
        myCon.Open();
        using (SqlCommand myCommand = new SqlCommand(query, myCon)) {
            myCommand.Parameters.AddWithValue("@ObjektiMeQiraEmri", omq.ObjektiMeQiraEmri);
            myCommand.Parameters.AddWithValue("@LlojiObjektit", omq.LlojiObjektit);
            myCommand.Parameters.AddWithValue("@Siperfaqe", omq.Siperfaqe);
            myCommand.Parameters.AddWithValue("@NumriIDHomave", omq.NumriIDHomave);
            myCommand.Parameters.AddWithValue("@Kati", omq.Kati);
            myCommand.Parameters.AddWithValue("@Cmimi", omq.Cmimi);
            myCommand.Parameters.AddWithValue("@Vendndodhja", omq.Vendndodhja);
            myCommand.Parameters.AddWithValue("@Qyteti", omq.Qyteti);
            myCommand.Parameters.AddWithValue("@Shteti", omq.Shteti);
            
            // 插入操作不需要DataReader和DataTable,用ExecuteNonQuery更合适
            myCommand.ExecuteNonQuery();
        }
    }
    return new JsonResult("Added Successfully");
}

额外优化说明

  • 插入/更新/删除这类写操作,不需要使用SqlDataReader和DataTable,直接调用ExecuteNonQuery()即可,它会返回受影响的行数,更符合操作场景。
  • using块会自动释放连接和命令资源,不需要手动调用Close(),删掉冗余的手动关闭代码能让代码更简洁安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:07:37