我正在尝试创建一个登录页面,当我给executereader它工作时,当我给exetenonquery它返回-1值而不是1。
这在cmd.executenonquery()
上返回-1SqlCommand 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();
答案 0 :(得分:1)
你的ExecuteReader也不起作用。您不检查select是否返回1但是select是否返回任何行。它总是如此。如果未找到匹配项,则返回包含0的1行。
ExecuteNonQuery不合适,因为您正在查询!
您应该使用ExecuteScalar。
此外,您应该使用'using'构造或最后尝试正确处理SqlConnection和SqlCommand。
答案 1 :(得分:0)
<强>的ExecuteNonQuery 强>
ExecuteNonQuery方法将返回受影响的行数 INSERT,DELETE或UPDATE操作。这个ExecuteNonQuery方法会 仅用于插入,更新和删除,创建和SET 声明。 (Read More about ExecuteNonQuery)
SqlCommand.ExecuteNonQuery MSDN Documentation
<强>的ExecuteReader 强>
Execute Reader将用于在执行时返回行集 使用命令对象的SQL查询或存储过程。这个是 仅转发记录的检索,并用于读取表格 从头到尾的值。(Read More about ExecuteReader)