Il metodo ExecuteNonQuery viene utilizzando quando si eseguono comandi, cioè statement SQL di inserimento, modifica o cancellazione, cioè comandi che non restituiscono un "resultset".

Nel tuo caso, stai eseguendo un'istruzione SQL di SELECT, quindi stai richiedendo un'informazione a cui devi accedere (sul DB non ha alcuna influenza, non modifica alcun dato).

Per questo scopo, devi eseguire il metodo ExecuteReader per ottenere un oggetto DataReader col quale puoi ispezionare il "record set" ottenuto; nel caso in esame, meglio ancora utilizzare ExecuteScalar, che restituisce il valore del primo campo per il primo record presente nel recordset, che è esattamente il conteggio che stai cercando.

Per l'esecuzione del comando, "parametrizza" il valore specificato per la clausola WHERE seguendo le indicazioni che ho fornito oggi in questa discussione.

Tutte queste informazioni sono tuttavia - come sempre - disponibili su MSDN, che va sempre consultata (in quanto contiene anche esempi) prima di postare.

Ciao!