ExecuteNonQuery 返回 0?

ExecuteNonQuery returning a 0?

我有以下代码将哈希值和用户名与本地数据库中相应的哈希值和用户名进行比较 (App_Users3)

//-
SqlConnection con = new SqlConnection();
con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
con.Open();                

var cmd = new SqlCommand(@"SELECT Username, Hash FROM App_Users3 WHERE Hash = @Hash AND Username = @Username");
cmd.Connection = con;

// savedPasswordHash = cmd.ExecuteScalar() as string;
cmd.Parameters.Add("@Hash", SqlDbType.NVarChar, 50).Value = savedPasswordHash;
cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 400).Value = AppUsername;

if (cmd.ExecuteNonQuery() > 0) 
{
    MessageBox.Show(" Query successful.. something matched..  ");
    // change page.. load a profile? 
}

它没有抛出任何错误,但我不明白为什么没有显示消息框。

ExecuteNonQuery returns the rows affected by modifying data statements (insert, update, delete). You should use ExecuteScalar for such select statements, and for example return the user's ID value. If you want to return more than one value (either multiple rows or multiple columns), you should use ExecuteReader.

您的代码已修改为 return 匹配用户的用户 ID。

//-
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
    con.Open();                

    var cmd = new SqlCommand(@"SELECT UserId FROM App_Users3 WHERE Hash = @Hash AND Username = @Username");
    cmd.Connection = con;
    //savedPasswordHash = cmd.ExecuteScalar() as string;
    cmd.Parameters.Add("@Hash", SqlDbType.NVarChar, 50).Value= savedPasswordHash;
    cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 400).Value = AppUsername;


    if (cmd.ExecuteScalar() != null) {
        MessageBox.Show(" Query successful..something matched..  ");
        //change page.. load a profile? 
    }
}