次のように空の文字列変数を宣言します。
string myString = string.Empty;
'DateTime'変数に相当するものはありますか?
更新:
問題は、この「DateTime」をSQLの「StoredProcedure」のパラメーターとして使用することです。例えば:
DateTime? someDate = null;
myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);
このコードを実行すると、「StoredProcedure」が「@SurgeryDate」パラメーターを予期していることを示す例外がキャッチされます。しかし、私はそれを提供しました。理由は何ですか?
DateTime
は値型であるため、null
を割り当てることはできませんが、これらの場合(値がない場合)に正確に Nullable<T>
が導入されました-代わりにnull許容のDateTime
を使用してください:
DateTime? myTime = null;
いいえ。2つのオプションがあります。
DateTime date = DateTime.MinValue;
これは、X時間ごとに何かをする必要がある場合(常にMinValue
を超えているため)に機能しますが、注意しないと実際に微妙なエラー(MinValue
でない場合は最初のチェックなしの演算子を使用するなど)を引き起こす可能性があります。
そして、Nullable
を使用できます。
DateTime? date = null;
これは素晴らしいことであり、1または2だけを導入しながらほとんどの問題を回避します。
それはあなたが何を達成しようとしているかに本当に依存します。
DateTime変数を「1/1/0001 00:00:00」に設定できますが、変数自体をnullにすることはできません。このMinTimeを使用するには:
DateTime variableName = DateTime.MinValue;
NULL可能日時を使用することもできます。 Datetime? someDate = null;
そのようなインスタンスでDateTime.Max
またはDateTime.Min
を使用している人々のインスタンスを見つけることができますが、そうすることを非常に疑います。 Edgeケースのバグ、読みにくいコードなどにつながります。
使用したメソッド(AddWithValue
)は、null
値をデータベースのNULLに変換しません。代わりに DBNull.Value
を使用する必要があります。
myCommand.Parameters.AddWithValue(
"@SurgeryDate",
someDate == null ? DBNull.Value : (object)someDate
);
これは、someDate
でない場合はnull
値を渡し、そうでない場合はDBNull.Value
を渡します。この場合、正しい値がデータベースに渡されます。
どちらか:
DateTime dt = new DateTime();
または
DateTime dt = default(DateTime);
に日付を設定した場合
DateTime dNewDate = new DateTime();
値は{1/1/0001 12:00:00 AM}に設定されます
オプション1:null許容のDateTimeを使用しますか?
オプション2:DateTime.MinValueを使用する
個人的には、オプション1を好みます。
string
は、文字のシーケンスです。したがって、空のstring
を持つことは理にかなっています。これは単なる空の文字シーケンスです。
しかし、DateTime
は単一の値であるため、「空の」DateTime
について話すのは意味がありません。
「値なし」の概念を表現したい場合、それは.Netでnull
として表されます。また、値型でそれを使用する場合は、明示的にnull可能にする必要があります。つまり、Nullable<DateTime>
、または同等のDateTime?
を使用します。
DateTime
(すべての値タイプと同様)にもデフォルト値があり、これは初期化されていないフィールドに割り当てられ、new DateTime()
またはdefault(DateTime)
でも取得できます。ただし、有効な日付:1.1.0001 0:00:00を表すため、おそらく使用したくないでしょう。
空の日付自体はありませんが、次のようなものですか?
DateTime? myDateTime = null;
.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);
}
}