cmd1.ExecuteScalar()
не връща цяло число в кутия. Присвоете го на обект и го погледнете в програмата за отстраняване на грешки, за да видите какво всъщност представлява.
Предполагам, че ще връща Decimal или Double и трябва да направите:
Int32 result = (Int32)(double)cmd1.ExecuteScalar();
Или:
Int32 result = (Int32)(Decimal)cmd1.ExecuteScalar();
[РЕДАКТИРАНЕ в отговор на въпрос в коментарите по-долу]
За да запазите десетичната стойност, просто направете следното:
Decimal result = (Decimal) cmd1.ExecuteScalar();
Ако трябва, можете да прехвърлите десетичната запетая на двойно:
double result = (double)(Decimal) cmd1.ExectuteScalar();