web-dev-qa-db-ja.com

空のDateTime変数を設定します

次のように空の文字列変数を宣言します。

    string myString = string.Empty;

'DateTime'変数に相当するものはありますか?

更新:

問題は、この「DateTime」をSQLの「StoredProcedure」のパラメーターとして使用することです。例えば:

    DateTime? someDate = null;
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);

このコードを実行すると、「StoredProcedure」が「@SurgeryDate」パラメーターを予期していることを示す例外がキャッチされます。しかし、私はそれを提供しました。理由は何ですか?

45
phadaphunk

DateTimeは値型であるため、nullを割り当てることはできませんが、これらの場合(値がない場合)に正確に Nullable<T> が導入されました-代わりにnull許容のDateTimeを使用してください:

DateTime? myTime = null;
74
BrokenGlass

いいえ。2つのオプションがあります。

DateTime date = DateTime.MinValue;

これは、X時間ごとに何かをする必要がある場合(常にMinValueを超えているため)に機能しますが、注意しないと実際に微妙なエラー(MinValueでない場合は最初のチェックなしの演算子を使用するなど)を引き起こす可能性があります。

そして、Nullableを使用できます。

DateTime? date = null;

これは素晴らしいことであり、1または2だけを導入しながらほとんどの問題を回避します。

それはあなたが何を達成しようとしているかに本当に依存します。

27
Shahar Prish

DateTime変数を「1/1/0001 00:00:00」に設定できますが、変数自体をnullにすることはできません。このMinTimeを使用するには:

DateTime variableName = DateTime.MinValue;
11
Brian Warfield

NULL可能日時を使用することもできます。 Datetime? someDate = null;

そのようなインスタンスでDateTime.MaxまたはDateTime.Minを使用している人々のインスタンスを見つけることができますが、そうすることを非常に疑います。 Edgeケースのバグ、読みにくいコードなどにつながります。

6
Servy

使用したメソッド(AddWithValue)は、null値をデータベースのNULLに変換しません。代わりに DBNull.Value を使用する必要があります。

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate
);

これは、someDateでない場合はnull値を渡し、そうでない場合はDBNull.Valueを渡します。この場合、正しい値がデータベースに渡されます。

5
Alex

どちらか:

DateTime dt = new DateTime();

または

DateTime dt = default(DateTime);
5
iliketocode

に日付を設定した場合

DateTime dNewDate = new DateTime();

値は{1/1/0001 12:00:00 AM}に設定されます

4
Chris Catignani

オプション1:null許容のDateTimeを使用しますか?

オプション2:DateTime.MinValueを使用する

個人的には、オプション1を好みます。

3
Matt Burland

stringは、文字のシーケンスです。したがって、空のstringを持つことは理にかなっています。これは単なる空の文字シーケンスです。

しかし、DateTimeは単一の値であるため、「空の」DateTimeについて話すのは意味がありません。

「値なし」の概念を表現したい場合、それは.Netでnullとして表されます。また、値型でそれを使用する場合は、明示的にnull可能にする必要があります。つまり、Nullable<DateTime>、または同等のDateTime?を使用します。

DateTime(すべての値タイプと同様)にもデフォルト値があり、これは初期化されていないフィールドに割り当てられ、new DateTime()またはdefault(DateTime)でも取得できます。ただし、有効な日付:1.1.0001 0:00:00を表すため、おそらく使用したくないでしょう。

3
svick

空の日付自体はありませんが、次のようなものですか?

DateTime? myDateTime = null;
1
Jamie Keeling

.addwithvalueにはdbnullが必要です。次のようなことができます:

DateTime? someDate = null;
//...
if (someDate == null)
    myCommand.Parameters.AddWithValue("@SurgeryDate", DBnull.value);

またはメソッド拡張を使用して...

  public static class Extensions
    {
        public static SqlParameter AddWithNullValue(this SqlParameterCollection collection, string parameterName, object value)
        {
            if (value == null)
                return collection.AddWithValue(parameterName, DBNull.Value);
            else
                return collection.AddWithValue(parameterName, value);
        }
    }
0
Chris Catignani