Commandobject.executenonquery()和Commandobject.executereader()为count(*)提供不同的结果

时间:2013-12-15 07:23:37

标签: asp.net executenonquery executereader

我正在尝试创建一个登录页面,当我给executereader它工作时,当我给exetenonquery它返回-1值而不是1。

这在cmd.executenonquery()

上返回-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();

2 个答案:

答案 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)

SqlCommand.ExecuteReader MSDN Documentation