2011-04-16 22 views
5

Sql'de null olarak DateTime alanını ayarlamanız gerektiğinde iki durumum var. SQL sınıfları için C# ve LINQ kullanıyorum. Benim soru gibi olan stackoverflow ile ilgili pek çok soru okudum ama yine de benimkini biraz farklı besliyorum.Sql DateTime null değerinin null olarak ayarlanması LINQ

Yeni bir müşteri eklediğimizde.

Sorumlu kodu:

Customer customer = new Customer(); 
customer.CustomerName = txt_name.Text; 
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : //send null here; 

customer.DOB System.DateTime olduğunu. Denedim ne

geçerli:

1)

customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null; 

Ama SqlDateTime System.DateTime için dönüştürülemez olarak bu başarılı olmayacaktır.

2) Bu durumda

DateTime? nullDateTime = new DateTime(); 
customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value 

, başarılı inşa ancak bir SqlDateTime taşma özel durum oluşturur.

Öyleyse nasıl tanesi

enter image description here

Birçok Otomatik Devam true Oluşturulan Değerini ayarlamak için önermek ve herhangi bir değer eklemek için değil LINQ Dataclass içinde

Mülkiyet DOB Üyesi boş değerini geçmesi. Doğru, insert durumlarda çalışır.

Ancak, şimdi, bazı datetime değerinin DOB alanına ayarlandığı bir müşteri girişi olduğunu varsayalım. Şimdi, kullanıcı bu değeri (doğum tarihini kaldır) silmek istiyorsa, bu durumda karşılık gelen müşteri sırasına yazılan tarih saatini temizlemek için UpdateOn kullanarak boş bir değer vermem gerekiyor.

DOB bu kod istediğini verecek null olduğundan

+0

NULL değil, null olarak ayarlayamadınız mı? Sütun null olması durumunda –

+0

'Customer.DOB'' DateTime' yerine 'DateTime'' olmalıdır. –

cevap

13

böyle bir şey bulamıyorum. Güncel sorun, derleyicinin işlenenlere dayanan koşullu ifadenin türünü çalıştıramamasıdır.

İkinci denemenizdeki sorun, sıfırlanamayan yeni bir DateTime değeri oluşturuyor olmanızdır, örneğin, 1 Ocak 0001 AD. Bunu aşağıdaki gibi değiştirebilirsiniz:

DateTime? nullDateTime = null; 
customer.DOB = dtp_dob.Checked 
        ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
        : nullDateTime; 
+0

Muhteşem, bir çekicilik gibi çalıştı :) Thanksss .. !! – Marshal

0

plz

if(dtp_dob.Checked) 
{ 
    customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")); 
} 
else 
{ 
    cstomer.DOB =null; 
} 

deneyin :) şimdiden çok teşekkür ederim.

Customer customer = new Customer(); 
customer.CustomerName = txt_name.Text; 
customer.DOB = dtp_dob.Checked 
        ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
        : (DateTime?) null; 

Not DateTime? için null dökme: BTW i kullanmak gerekir nullDateTime.Value