cmd1.ExecuteScalar()
returnerar inte ett inrutat heltal. Tilldela det till ett objekt och titta på det i felsökaren för att se vad det egentligen är.
Jag antar att det kommer att returnera en decimal eller en dubbel, och du måste göra:
Int32 result = (Int32)(double)cmd1.ExecuteScalar();
Eller:
Int32 result = (Int32)(Decimal)cmd1.ExecuteScalar();
[REDIGERA som svar på en fråga i kommentarerna nedan]
För att behålla decimalvärdet gör du bara så här:
Decimal result = (Decimal) cmd1.ExecuteScalar();
Om du behövde kan du göra decimalen till en dubbel:
double result = (double)(Decimal) cmd1.ExectuteScalar();