-1

我正在尝试创建一个登录页面,当我给executereader它工作时,当我给executenonquery它返回一个-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();
4

2 回答 2

1

您的 ExecuteReader 也不起作用。您不检查 select 是否返回 1 而是检查 select 是否返回任何行。它总是如此。如果未找到匹配项,它将返回 1 行,其中包含 0 作为结果。

ExecuteNonQuery 不合适,因为您正在查询!

您应该改用 ExecuteScalar。

此外,您应该使用“使用”构造或尝试最终正确处理 SqlConnection 和 SqlCommand。

于 2013-12-15T08:18:59.227 回答
0

执行非查询

ExecuteNonQuery 方法将返回受 INSERT、DELETE 或 UPDATE 操作影响的行数。此 ExecuteNonQuery 方法将仅用于插入、更新和删除、创建和 SET 语句。(阅读有关 ExecuteNonQuery 的更多信息)

SqlCommand.ExecuteNonQuery MSDN 文档

执行阅读器

执行阅读器将用于在使用命令对象执行 SQL 查询或存储过程时返回行集。这是只向前检索记录,它用于从头到尾读取表值。(阅读有关 ExecuteReader 的更多信息)

SqlCommand.ExecuteReader MSDN 文档

于 2013-12-15T07:34:53.373 回答