Search code examples
sqlsql-servervisual-studio-2017sqlconnection

ExecuteNonQuery returning a 0?


I have the following code that is comparing a hash value and username to the corresponding hash value and username in a local database (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? 
}

It doesn't throw any errors but I don't understand why the messagebox isn't showing up.


Solution

  • 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.

    Here is your code modified to return UserID of the matched user.

    //-
        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? 
        }
    }