我正在尝试创建一个登录页面,当我给executereader时,它可以工作,当我给出executeonquery时,它返回-1值而不是1。
cmd.executeonquery()上返回-1
SqlCommand cmd = new SqlCommand("select Count(*) from userDb where username= '"+txtusername.Text+"' and password= '"+txtpassword.Text+"'", con);
以下代码带有executereader()
SqlCommand cmd = new SqlCommand("select Count(*) from userDb where username= @p1 and password= @p2", con);
**Complete Code**
SqlCommand cmd = new SqlCommand("select Count(*) from userDb where username= @p1 and password= @p2", con);
cmd.Parameters.AddWithValue("@p1", txtusername.Text);
cmd.Parameters.AddWithValue("@p2", txtpassword.Text);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read()==true)
{
FormsAuthentication.RedirectFromLoginPage(txtusername.Text, CheckBox1.Checked);
}
else
{
lbldisplay.Text = "Username and Password Do not Match";
}
con.Close();
带executenonquery 的代码
SqlCommand cmd = new SqlCommand("select Count(*) from userDb where username= '"+txtusername.Text+"' and password= '"+txtpassword.Text+"'", con);
con.Open();
int i = executenonquery();
if (i == 1)
{
FormsAuthentication.RedirectFromLoginPage(txtusername.Text, CheckBox1.Checked);
}
else
{
lbldisplay.Text = "Username and Password Do not Match";
}
con.Close();
您的ExecuteReader也不起作用。您不检查select是否返回了1,而是检查select是否返回了任何行。它总是这样。如果未找到匹配项,则返回包含0的1行作为结果。
ExecuteNonQuery不合适,因为您正在查询!
您应该改用ExecuteScalar。
此外,您应该使用"using"构造,或者最终尝试正确处理SqlConnection和SqlCommand。
ExecuteNonQuery
ExecuteNonQuery方法将返回受INSERT、DELETE或UPDATE操作。此ExecuteNonQuery方法将仅用于插入、更新和删除、创建和设置声明。(阅读有关ExecuteNonQuery的更多信息)
SqlCommand.ExecuteNonQuery MSDN文档
执行阅读器
在执行使用命令对象的SQL查询或存储过程。这个是仅向前检索记录,用于读取表从第一个到最后一个的值。(阅读更多关于ExecuteReader的信息)
SqlCommand.ExecuteReader MSDN文档