オブジェクトを DBNull から他のタイプにキャストすることはできません。
オブジェクトを DBNull から他のタイプにキャストすることはできません。SqlCommand.ExecuteScalar メソッドの戻り値のキャストが失敗すると、以上のようなエラーが出る。この ExecuteScalar メソッドの挙動は少々クセがあるようだ。
場所 System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider)
場所 System.Convert.ToInt32(Object value)
SQL コマンドとパラメータを与えてメソッドを実行するのだが、SQL コマンドで SUM をしていると、0 ではなく、System.DbNull が返される。
そのため、null チェックとともに DBNull.Value のチェックも行わなければならない(DBNull.Value では TryParse もできない)。
// obj は Object 型の変数 if (obj == null || obj == DBNull.Value) { // 戻り値がない。 }SqlCommand.ExecuteScalar メソッド
https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.executescalar%28v=VS.90%29.aspx