Pages

2015/01/26

オブジェクトを DBNull から他のタイプにキャストすることはできません。

オブジェクトを DBNull から他のタイプにキャストすることはできません。
場所 System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider)
場所 System.Convert.ToInt32(Object value)
SqlCommand.ExecuteScalar メソッドの戻り値のキャストが失敗すると、以上のようなエラーが出る。この ExecuteScalar メソッドの挙動は少々クセがあるようだ。
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
Related Posts Plugin for WordPress, Blogger...