0

重複の可能性:
DBNull を処理する最善の方法は何ですか?

DBNull の値を持つ変数を設定するための .NET で最も効率的な構文は何ですか (別名 SQL null 値が返されます)? この種のことのために.NET 3.0に組み込まれたものを読んだことを覚えています。設定している変数の型が DateTime であると仮定しましょう。

一般的なエラー:
タイプ 'DBNull' からタイプ 'Date' への変換は無効です。

4

2 に答える 2

2

DateTimeは値型であり、有効な日時のみを含めることができます。通常、これを処理する方法は、データベースから返された値をチェックして、それがDBNull.Valueであるかどうかを確認し、そうである場合は、DateTimeをNullを表すDateTime.MinValueなどの特別な値に設定します。

または、DateTimeを使用できますか?これはnull許容のDateTimeデータ型であり、実際にnullを割り当てることができます(DBNullではなく通常の.Net null)。

DateTime foo;
if (row["SomeField"] == DBNull.Value) {
    foo = DateTime.MinValue;
} else {
    foo = (DateTime)row["SomeField"];
}

次のようにDataRowに拡張メソッドを作成することで、この構文を少し良くすることができます。

public static void ToDateTime(this DataRow row, string columnName) {
    if (row[columnName] == DBNull.Value) {
        return DateTime.MinValue;
    } else {
        return (DateTime)row[columnName];
    }
}

次に、元のコードを次のように書き直すことができます。

DateTime foo = row.ToDateTime("SomeField");
于 2011-10-14T18:27:29.353 に答える
2

私は通常、クラスのプロパティをNULL可能型にすることでこれを回避します。デフォルトでは値がない(trueでもfalseでもない)ため、これは特にブール型に関連します。

public class MyDbTable
    {
        public int MyId { get; set; }
        public DateTime? Date { get; set; }
        public bool? IsDirty { get; set; }
    }
于 2011-10-14T18:32:12.130 に答える