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

ASP.NET集成Dapper写入PostgreSQL数据未成功入库问题

PostgreSQL写入失败排查结论

核心问题出在前端表单路由配置错误,另有两处高风险隐患会导致同类问题:

  • 核心报错点:表单提交目标Action不匹配
    你编写的数据库插入逻辑在PeopleController的Create POST方法中,但前端表单标签配置的是asp-action="Contacts",提交请求时根本不会路由到你写了插入逻辑的方法,自然不会执行SQL写入,也不会触发你这段代码里的报错。
    修复方式:将表单标签的action属性修改为匹配的方法名
    <form asp-action="Create">
    
  • 隐患1:数据库连接未做可靠释放
    现有代码手动调用con.Close(),如果SQL执行过程中抛出异常,连接不会被关闭,会持续占用连接池资源,极端情况下会导致连接池耗尽无法访问数据库。建议用using块包裹数据库连接对象,退出代码块时会自动释放资源,无需手动调用Close方法,修改后的POST逻辑如下:
    [HttpPost]
    public IActionResult Create(People people)
    {
        if (ModelState.IsValid)
        {
            string insertQuery = "INSERT INTO people(name, phone) VALUES(@Name, @Phone)";
            using (IDbConnection con = new NpgsqlConnection(ConnectionString))
            {
                con.Open();
                con.Execute(insertQuery, people);
            }
            return RedirectToAction(nameof(Index));
        }
        return View(people);
    }
    
  • 隐患2:电话号码字段类型不合理
    实体类中Phone字段定义为int类型,而int类型最大仅支持10位数值(最大值2147483647),只要录入的电话号码长度超过10位、或者带前置0/特殊符号,就会触发模型校验失败,直接返回视图不会进入插入逻辑,且无明显报错。建议将实体类、数据库表中的Phone字段统一改为字符串类型,适配电话号码的存储需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:36:33