ASP.NET集成Dapper写入PostgreSQL数据未成功入库问题
PostgreSQL写入失败排查结论
核心问题出在前端表单路由配置错误,另有两处高风险隐患会导致同类问题:
- 核心报错点:表单提交目标Action不匹配
你编写的数据库插入逻辑在PeopleController的CreatePOST方法中,但前端表单标签配置的是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
相关产品推荐
相关产品推荐

