如何在ASP.NET Core中查询MySQL指定ID行?现有代码问题如何排查?
代码问题汇总
- 最核心的错误:你在SQL语句中声明了参数占位符
@UsersId,但没有给MySqlCommand对象添加对应的参数赋值,方法接收的id参数完全没有传入SQL执行流程,会直接导致SQL执行异常或者查询不到任何结果。 - 资源释放冗余:你已经用
using关键字包裹了MySqlConnection和MySqlCommand对象,using会在代码块执行结束后自动释放对应资源,额外手写myReader.Close()、mycon.Close()属于多余操作。 - 缺少异常处理逻辑:数据库连接失败、SQL执行报错时会直接抛出未处理异常,前端仅能拿到通用500错误,无法定位问题也没有友好提示。
- 入参无校验:没有对传入的
id做合法性校验(比如id小于等于0的非法值),无效请求直接访问数据库属于不必要的性能浪费。 - 返回格式不友好:直接返回
DataTable序列化后的结果结构冗余,建议转成强类型实体对象返回,更方便前后端对接。
修正后的参考代码
// 先定义用户实体类 public class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } [HttpGet("{id}")] public IActionResult Get(int id) { // 提前校验入参 if (id <= 0) { return BadRequest("无效的用户ID"); } string query = @"select id,firstname,lastname from udemydb.users where id=@UsersId"; string sqlDataSource = _configuration.GetConnectionString("UsersAppCon"); User user = null; try { using (MySqlConnection mycon = new MySqlConnection(sqlDataSource)) { mycon.Open(); using (MySqlCommand myCommand = new MySqlCommand(query, mycon)) { // 补上参数赋值 myCommand.Parameters.AddWithValue("@UsersId", id); using (MySqlDataReader myReader = myCommand.ExecuteReader()) { if (myReader.Read()) { user = new User { Id = myReader.GetInt32("id"), FirstName = myReader.IsDBNull("firstname") ? null : myReader.GetString("firstname"), LastName = myReader.IsDBNull("lastname") ? null : myReader.GetString("lastname") }; } } } } } catch (Exception ex) { // 可根据需求自行添加日志记录逻辑 return StatusCode(500, "数据查询失败:" + ex.Message); } if (user == null) { return NotFound("未找到对应用户"); } return Ok(user); }
内容的提问来源于stack exchange,提问作者Ali Mahmoudi
相关产品推荐
相关产品推荐

