Basato su MSDN:
Per le istruzioni UPDATE, INSERT e DELETE, il valore restituito è il numero di righe interessate dal comando. Quando esiste un trigger su una tabella in fase di inserimento o aggiornamento, il valore restituito include il numero di righe interessate dall'operazione di inserimento o aggiornamento e il numero di righe interessate dal trigger o dai trigger. Per tutti gli altri tipi di istruzioni, il valore restituito è -1. Se si verifica un rollback, anche il valore restituito è -1.
Vuoi restituire il numero di righe interessate dal comando e salvarlo in un int variabile ma poiché il tipo di istruzione è select quindi restituisce -1 .
Soluzione :Se vuoi ottenere il numero di righe interessate dal comando SELECT e salvarlo in una variabile int puoi usare ExecuteScalar .
var theCount = (int)cmd.ExecuteScalar();