1 回答
TA贡献1803条经验 获得超6个赞
你需要在 -.ExecuteReader() 之后 sqlcon.Open()调用- 为什么你还要执行.ExecuteNonQuery()?您已经通过调用执行查询.ExecuteReader()- 这是无用的,应该删除(ExecuteNonQuery适用于运行INSERT, UPDATEor DELETE- 的 SQL 语句,但不适用于您在这里有类似情况的情况SELECT...)。
SqlCommand cmd = new SqlCommand("SELECT * FROM users WHERE username = @username AND password = @password", sqlcon);
cmd.Parameters.Add("@username", SqlDbType.VarChar, 100).Value = txtUsername.Text);
cmd.Parameters.Add("@password", SqlDbType.VarChar, 100).Value = txtPassword.Text;
// open connection
sqlcon.Open();
// execute reader and iterate over rows
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
Main objMain = new Main();
this.Hide();
objMain.Show();
}
else
{
MessageBox.Show("Check your username and password");
}
// close connection only **AFTER** you've read the data!
sqlcon.Close();
由于您只想检查给定用户是否存在用户名和密码,因此返回表的所有列确实是一种矫枉过正 - 仅返回例如(或其他一些列)Users
就足够了UserId
,小栏) - 然后使用.ExecuteScalar()
。如果具有该用户名和密码的用户存在,则UserId
返回ExecuteScalar()
该用户名和密码 - 如果该用户不存在,则返回 NULL。
像这样的东西:
SqlCommand cmd = new SqlCommand("SELECT UserId FROM users WHERE username = @username AND password = @password", sqlcon);
cmd.Parameters.Add("@username", SqlDbType.VarChar, 100).Value = txtUsername.Text);
cmd.Parameters.Add("@password", SqlDbType.VarChar, 100).Value = txtPassword.Text;
// open connection
sqlcon.Open();
// execute scalar
object result = cmd.ExecuteScalar();
// if we got a result --> user with that username nad password exists
if (result != null)
{
Main objMain = new Main();
this.Hide();
objMain.Show();
}
else
{
MessageBox.Show("Check your username and password");
}
sqlcon.Close();
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报