13

2つのDateTimeオブジェクト、BirthDateとHireDateがあります。これらは文字列として正しくフォーマットされており、データアクセス層に渡すときに、DateTimeオブジェクトに解析する必要があります。

DateTime hD = DateTime.Parse(hire);            
DateTime bD = DateTime.Parse(birth);

//incase of a datestring being passed through
dateStringPassed = "7/2/1969";

ただし、文字列hirebirthがnullまたは空""の場合があります。コードをこのように実行すると、空の文字列の解析でFormatExceptionエラーが発生します。空の解析を管理し、DateTimeが空またはnullの場合、として受け入れられるようにするにはどうすればよいDBNull.Valueですか?

ユーザーがDateTime文字列を渡さない場合でも管理できず、解析によってコードがクラッシュします。

生年月日のパラメータは次のとおりで、変数がnullかどうかをチェックしてから、DBNull.Valueを使用します。

4

3 に答える 3

19

このParseメソッドは空の文字列を処理できませんが、null許容のDateTimeを使用して、次のようにすることができます。

DateTime? hD = String.IsNullOrEmpty(hire) ? (DateTime?)null : DateTime.Parse(hire)

しかし、TryParse代わりにさらに安全に使用することもできます。

DateTime? hD = null;
DateTime.TryParse(hire, out hD);

次に、この値を保存するために、次のことをテストできますhD.HasValue

if(hD.HasValue) { /* use hD */ }
else { /* else use DBNull.Value */ }

C#7以降、インライン出力パラメーターに短い構文を使用でき、null許容型を完全に回避できます。

if (DateTime.TryParse(hire, out var hD)) { /* use hD */ }
else { /* use DBNull.Value */ }
于 2012-11-25T21:13:11.047 に答える
4

null許容の日時を使用する必要があります-ショートカット構文は次のようになりますDateTime?(最後にあることに注意してください?)。

DateTime? hD = null;
if(!string.IsNullOrWhitespace(hire )) // string.IsNullOrEmpty if on .NET pre 4.0
{
   hD = DateTime.Parse(hire);            
}

代わりにhD.HasValue使用しないかどうかをテストできます。DbNull.Value

于 2012-11-25T21:09:49.260 に答える
0

このメソッドを使用する場合、正しい日付でないものはすべて:を返しますDBNull.Value

/// <summary>
/// Parses a date string and returns
/// a DateTime if it is a valid date,
/// if not returns DBNull.Value
/// </summary>
/// <param name="date">Date string</param>
/// <returns>DateTime or DBNull.Value</returns>
public static object CreateDBDateTime(string date)
{
    DateTime result;
    if (DateTime.TryParse(date, out result))
    {
        return result;
    }
    return DBNull.Value;
}
于 2012-11-25T21:38:42.497 に答える