我的登录名有效,但是我只能用表中的第一个用户登录
谁能解释为什么?
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个用户,但我只能用表中的第一个用户成功登录
答案 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
。