Commandobject.executeonquery()和Commandobject.excutereader()为



我正在尝试创建一个登录页面,当我给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文档

相关内容

  • 没有找到相关文章

最新更新