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 null
ler 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
Ah ha! @Trebz. daha etkili bir çözüm buldum!
datePrm.Value = nullableDate ?? (object)DBNull.Value;
Hangisi daha verimli, her döngü, ya da...
Daha verimli nedir? Meydanı pow ile ya...
Bu iki döngü için zaman ve önbellek pe...
\d daha az verimli [0-9]...
Tarafından rvalue başvuru daha verimli...