SORU
20 EKİM 2008, PAZARTESİ


C# ADO.NET: boşluk ve DbNull -- orada daha verimli sözdizimi.

Bir alana bir şey yapmaya çalışıyorum DateTime? ınsert DbParameter bir kullanma var. Öyle gibi: parametre yaratıyorum

DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";

Ve sonra nulller için muhasebe yaparken dataPrm.Value DateTime? değeri koymak istiyorum.

Zeki olurdum başlangıçta düşündüm:

datePrm.Value = nullableDate ?? DBNull.Value;

ama bu hata ile başarısız olur

?? ''Operatör türü 'System.işlenen uygulanamaz DateTime' ve 'Sistem.?'. DBNull

Bu yalnızca ikinci argümanı ilk bağımsız değişken null olmayan bir sürümü çalışıyor sanırım. Sonra gittim:

datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;

ama o da çalışmıyor:

Koşullu ifade yazamaz örtülü dönüşüm yok çünkü belirlenecek 'Sistemi arasında.DateTime' ve 'Sistem.'. DBNull

Ama bu türler arasında dönüştürme istemiyorum!

Bu zamana kadar yapabildiğim tek şey:

if (nullableDate.HasValue)
  datePrm.Value = nullableDate.Value;
else
  datePrm.Value = DBNull.Value;

Gerçekten bu yazabiliyorum tek yolu nedir? Bir şekilde oyunu bir üçlü operatörü kullanarak işe almak için var mı?

Güncelleme:Gerçekten anlamıyorum ?? sürüm çalışmıyor. MSDN diyor ki:

?? operatör eğer boş değilse sol döndürür, yoksa sağ işlenen döndürür.

Tam olarak bunu istiyorum!

Update2:Eh sonunda oldukça açıktı:

datePrm.Value = nullableDate ?? (object)DBNull.Value;

CEVAP
20 EKİM 2008, PAZARTESİ


Ah ha! @Trebz. daha etkili bir çözüm buldum!

datePrm.Value = nullableDate ?? (object)DBNull.Value;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • bombjack2991

    bombjack2991

    29 HAZİRAN 2008
  • Press Start

    Press Start

    4 HAZİRAN 2006