12

データベースから 10 進数値を取得したいのですが、null 値を確認するための推奨される方法を知りたいです。

MSDN - DBNull.Value Fieldで、このチェックがめったに使用されないことを見てきました。

したがって、reader.IsDBNullヌルをチェックするための最良/最も効率的な方法はありますか?

2 つのサンプル メソッドを作成しました。

public static decimal? GetNullableDecimal(SqlDataReader reader, string fieldName)
{
    if (reader[fieldName] == DBNull.Value)
    {
        return null;
    }
    return (decimal)reader[fieldName];
}

public static decimal? GetNullableDecimal_2(SqlDataReader reader, string fieldName)
{
    if (reader.IsDBNull(reader[fieldName]))
    {
         return null;
    }
    return (decimal)reader[fieldName];
}

ほとんどの場合、フィールドは null になります。

前もって感謝します!

4

3 に答える 3

5

@Karl Andersonの答えのより簡単なバージョンは次のとおりです。

public static class DbHelper
{
    public static T GetValue<T>(this SqlDataReader sqlDataReader, string columnName)
    {
        var value = sqlDataReader[columnName];

        if (value != DBNull.Value)
        {
            return (T)value;
        }

        return default(T);
    }
}

あるいは:

public static class DbHelper
{
    public static T GetValue<T>(this SqlDataReader sqlDataReader, string columnName)
    {
        var value = sqlDataReader[columnName];

        return value == DBNull.Value ? default(T) : (T) value;
    }
}

直接キャストは、null 許容型または null 非許容型のどちらでも問題なく機能するようです。

于 2017-03-27T13:28:19.583 に答える