Ho incapsulato la maggior parte della mia logica SQL in un DAL. Uno di questi metodi DAL estrae gli Int scalari utilizzando la logica seguente. Potrebbe funzionare per te:
object temp = cmnd.ExecuteScalar();
if ((temp == null) || (temp == DBNull.Value)) return -1;
return (int)temp;
So che hai inserito molto codice sopra, ma penso che questa sia davvero l'essenza del tuo problema. Buona fortuna!