Cast to int on SqlCommand-ExecuteScalar error handling

Just change the code as:

int countDis = Convert.ToInt32(cmd.ExecuteScalar());

This will ensure that even if ExecuteScalar returns null, as result of not selecting anything in stored procedure, countDis will have a value of 0. Because Convert.ToInt32(null) = 0.

Update (10/12/2018)

Safer version. Thanks @Moe for highlighting DBNull case.

object result = cmd.ExecuteScalar();
result = (result == DBNull.Value) ? null : result;
int countDis = Convert.ToInt32(result);

I usually use nullable types. e.g. :

string str;

int? countDis = cmd.ExecuteScalar() as int?;
if (countDis == null)
   str = "count is null";
else
   str = "Count is : " + countDis.Value;

This will work for whether ExecuteScalar returns null or DBNull.Value.


You can check the scalar value before cast.

var result = cmd.ExecuteScalar();
int countDis =result != null ? int.Parse(result) : 0;

Because ExecuteScalar can return DBNull, the best way there I found is:

 var result = cmd.ExecuteScalar();
 int countDis = result != null ? Convert.ToInt32(result) : 0;