ExecuteNonQuery will always return -1 in your case.
From
MSDN[
^]:
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers.
For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.
You should use ExecuteScalar instead and have it return the row count. ExecuteNonQuery is normally used for queries where you don't care much about the returnvalue (except maybe the number of affected rows as per above text.