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

C#操作MySQL数据库如何校验用户名存在性及密码正确性

现有代码的问题

  • 你的SQL查询语句是同时匹配用户名和密码,只要返回结果为空,根本无法区分是用户名不存在,还是用户名存在但密码错误
  • ExecuteScalar()的使用完全错误:你执行的是select *语句,ExecuteScalar()会返回结果集第一行第一列的字段值,不是匹配的行数,直接强转int大概率会触发运行时异常
  • 同时用MySqlDataAdapter填充DataTable和调用ExecuteScalar()属于重复执行查询,完全没必要

修正后的实现逻辑

先单独查询对应用户名的记录,再判断密码是否匹配,代码如下:

String connectionString = @"Data Source=localhost; Database=pramod; User ID=itesuser; password=ites; Port=3309;";
// 用using自动释放连接资源,无需手动调用Close
using (MySqlConnection con = new MySqlConnection(connectionString))
{
    con.Open();
    // 仅按用户名查询对应密码
    String query = "select PASSWORD from logins where USERNAME=@username";
    MySqlCommand cmd = new MySqlCommand(query, con);
    cmd.Parameters.AddWithValue("@username", TextBox1.Text.Trim());
    
    object dbPwdObj = cmd.ExecuteScalar();
    // 查询结果为空说明用户名不存在
    if (dbPwdObj == null)
    {
        Response.Write("username wrong");
        return;
    }
    // 用户名存在,校验密码是否匹配
    string inputPwd = TextBox2.Text.Trim();
    string dbPwd = dbPwdObj.ToString();
    if (inputPwd == dbPwd)
    {
        Session["username"] = TextBox1.Text.Trim();
        Response.Redirect("Dashboard.aspx");
    }
    else
    {
        Label1.Visible = true;
        Label1.Text = "Your password is incorrect";
        Label1.ForeColor = System.Drawing.Color.Red;
    }
}

额外注意事项

  • 生产环境绝对不能明文存储密码,需要将密码做哈希加盐处理后存入数据库,校验时对比哈希值即可
  • 用using包裹数据库连接对象可以自动处理资源释放,避免连接泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:03