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

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
    }
}

额外注意事项

  1. 确认Postman的请求方式是DELETE,且路径中的user_id与数据库中存在的用户ID完全匹配(比如数据库里的user_id是1,请求路径应为api/product/wishlist/1)。
  2. 用ExecuteNonQuery()返回的受影响行数可以直观判断删除操作是否命中了记录,方便调试和给前端返回明确的反馈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:40