cmd1.ExecuteScalar()
ne renvoie pas un entier encadré. Affectez-le à un objet et regardez-le dans le débogueur pour voir ce qu'il est vraiment.
Je suppose qu'il va renvoyer un décimal ou un double, et vous devez faire :
Int32 result = (Int32)(double)cmd1.ExecuteScalar();
Ou :
Int32 result = (Int32)(Decimal)cmd1.ExecuteScalar();
[MODIFIER en réponse à une question dans les commentaires ci-dessous]
Pour conserver la valeur décimale, procédez comme suit :
Decimal result = (Decimal) cmd1.ExecuteScalar();
Si vous en aviez besoin, vous pouviez convertir la décimale en un double :
double result = (double)(Decimal) cmd1.ExectuteScalar();