2012-02-01 16 views
11

私はC#でnull可能なdatetimeオブジェクトを持っています。null可能なDateTimeとデータベース

DateTime? StartDate = new DateTime(); 

私は、日付がこのレコードに適用されるかどうかを判断するためにユーザーが投稿した値をチェックします。

if (Complete == "N/A") 
{ 
    StartDate = null; 
} 

今私は、またはnull日時を挿入してもしなくてもよい、私のクエリに来る:

using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = StartDate; 
} 

開始日がnullの場合は、タイプが正しくないというエラーが表示されます。ここから進むにはどうすればいいですか?

私はstartdateがnullであることを考慮しましたが、型がnull可能であるときにそれを行う方法がわかりません。開始日がnullの場合

+1

を、簡単に確認することができます。 1) '!StartDate.HasValue'、または2)単純に' StartDate == null' – Ray

答えて

18

これは、パラメータとして、データベースのNULL値を渡します:NULL可能タイプの2つの方法でnullの場合はさておきとして

using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = (object)StartDate ?? DBNull.Value; 
} 
+0

これは私が試していたものですが、この簡略構文を知らなかったのです! :) – deed02392

+0

これもエラー:オペレータ '??'型system.datetimeのオペランドには適用できません。およびsystem.dbnull。 – deed02392

+0

@ deed02392オブジェクトへの単純なキャストで固定 –

1
using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    if (StartDate.HasValue()) 
     command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
      = StartDate; 
    else 
     command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
      = DBNull.Value; 
} 
関連する問題