2011-12-29 15 views
2

null可能なDateTime変数があります。そして私はそれをSQL DBに書きたいと思います。私が挿入しようとするとき:Nullable DateTime変数のnull値をDbNull.Valueに変換する方法

変数に値がある場合は問題ありません。

ただし、値が設定されていない場合は、挿入がエラーで中断されます。

私は質問したい:DbCommandパラメータを使用してnull入力可能なDateTimeをSqlに挿入するにはどうすればよいですか?

(P.S.:SQL列があまりにもNULL可能である)

DateTime? myDate = null; 
DbCommand dbCommand = new DbCommand(); 
dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate); 
+0

を試してみてくださいあなたは 'null'と' DBNull.Value'を同じ意味で使用できると信じています。 – Yuck

+1

@Yuck - 私はあなたが2つを同じ意味で使うことはできないと思っています。少なくとも、すべてのデータベースプロバイダではできません。 NULL値をデータベースに挿入するときは、DBNull.Valueを使用する必要があります。 NULL対DBNull.Valueを処理する場合、セマンティクスに若干の違いがあります.Nullは無効なオブジェクト参照を参照しますが、DBNull.Valueはデータベース行の未知の値を参照します。髪の毛分裂のように見えますが、それは私が違いを見ることができる最高の推論です。 – matt

+0

@ mjd79 'SqlDbCommand'で動作します。おそらく' DbCommand'では動作しません。 – Yuck

答えて

11

null coalescing operatorをお試しください:?

dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, (object) myDate ?? DbNull.Value); 
+3

これはDBプロバイダによって処理されていないと私は少し驚いています。 –

0

は、あなたが得るエラーが何本

if(myDate.HasValue) 
    dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate.Value); 
else 
    dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, DbNull.Value); 
関連する問題