登录仅使用第一个用户

时间:2018-10-22 12:34:51

标签: c# .net ado.net

我的登录名有效,但是我只能用表中的第一个用户登录

谁能解释为什么?

private void btnLogin_Click(object sender, RoutedEventArgs e)
{
    SqlConnection sqlCon = new SqlConnection(@"Data Source=user\SQLEXPRESS; User ID=user;password=password;Initial Catalog=login;Trusted_Connection=True;");
    try
    {
        if (sqlCon.State == System.Data.ConnectionState.Closed)
            sqlCon.Open();

        string query = "SELECT * FROM tblUser WHERE Username=@Username AND Password=@Password";
        SqlCommand sqlCmd = new SqlCommand(query, sqlCon);
        sqlCmd.CommandType = System.Data.CommandType.Text;
        sqlCmd.Parameters.AddWithValue("@Username", txtUsername.Text);
        sqlCmd.Parameters.AddWithValue("@Password", pwd.Password);
        int count = Convert.ToInt32(sqlCmd.ExecuteScalar());

        if (count == 1)
        {
            MainDashboard window = new MainDashboard();
            this.Close();
            window.ShowDialog();
        }
        else
        {
            MessageBox.Show("Wrong Username or Password");
        }
    }
    catch (Exception)
    {

        throw;
    }
}

我的表名是tblUsers,我有2个用户,但我只能用表中的第一个用户成功登录

1 个答案:

答案 0 :(得分:2)

根据文档,ExecuteScalar执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

所以不是

string query = "SELECT * FROM tblUser WHERE Username=@Username AND Password=@Password";

尝试

string query = "SELECT COUNT(*) FROM tblUser WHERE Username=@Username AND Password=@Password";

说明:

  • ExecuteScalar()SELECT *一起使用将返回该行第一列的值(我想在您的情况下,它是表tbluser的ID /主键?)
  • 如果用户名和密码匹配(假设没有用户名/密码重复),则将ExecuteScalar()SELECT Count(*)一起使用将返回1