ASP.NET API删除MySQL记录代码无效,Postman调用后数据仍存在
问题分析:ASP.NET Web API中DELETE请求无法删除MySQL记录的原因及解决方法
让我帮你排查下问题所在,你的代码里有两个关键错误导致删除操作没生效:
- SQL参数未绑定:你写的SQL语句里用了
@user_id参数,但代码里完全没把方法接收的user_id值传递给这个参数。数据库收到的语句相当于delete from user_wishlist where user_id = NULL,自然找不到要删除的记录。 - 错误使用执行方法:
ExecuteReader()是用来执行SELECT这类需要返回结果集的查询的,对于DELETE、INSERT、UPDATE这类修改数据的语句,应该用ExecuteNonQuery(),它会返回受影响的行数,能帮你确认操作是否成功。
另外,原代码还有一个潜在问题:如果执行过程中抛出异常,conn.Close()可能不会执行,导致数据库连接泄漏。
修正后的代码
[Route("~/api/product/wishlist/{user_id}")] public IHttpActionResult Delete(int user_id) { try { // 使用using自动释放连接和命令资源,避免泄漏 using (MySqlConnection conn = WebApiConfig.conn()) { string sql = "delete from user_wishlist where user_id = @user_id"; using (MySqlCommand query = new MySqlCommand(sql, conn)) { // 绑定参数,确保SQL语句能拿到正确的用户ID query.Parameters.AddWithValue("@user_id", user_id); conn.Open(); int affectedRows = query.ExecuteNonQuery(); System.Diagnostics.Debug.WriteLine($"Deleted {affectedRows} row(s)"); // 返回符合REST规范的HTTP状态码 if (affectedRows > 0) { return Ok("记录删除成功"); } else { return NotFound(); // 未找到对应记录时返回404 } } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return InternalServerError(ex); // 服务器出错时返回500 } }
额外注意事项
- 确认Postman的请求方式是DELETE,且路径中的
user_id与数据库中存在的用户ID完全匹配(比如数据库里的user_id是1,请求路径应为api/product/wishlist/1)。 - 用
ExecuteNonQuery()返回的受影响行数可以直观判断删除操作是否命中了记录,方便调试和给前端返回明确的反馈。
内容的提问来源于stack exchange,提问作者Test 87
相关产品推荐
相关产品推荐

