cmd1.ExecuteScalar()
non restituisce un intero boxed. Assegnalo a un oggetto e guardalo nel debugger per vedere di cosa si tratta realmente.
Immagino restituirà un decimale o un doppio e devi fare:
Int32 result = (Int32)(double)cmd1.ExecuteScalar();
Oppure:
Int32 result = (Int32)(Decimal)cmd1.ExecuteScalar();
[MODIFICA in risposta a una domanda nei commenti di seguito]
Per mantenere il valore decimale, procedi come segue:
Decimal result = (Decimal) cmd1.ExecuteScalar();
Se necessario, puoi convertire il decimale in un double:
double result = (double)(Decimal) cmd1.ExectuteScalar();