2012-05-11 24 views
18

: bool travel = fill.travel.Value; aşağıdaki hatayı alıyorum:NULL nesnesinin bir değeri olmalı? satırda

Nullable object must have a value

ve nedenini emin değilim. Tek istediğim, şu anda yanlış olan seyahat veri tabanındaki değeri almak. Herhangi bir yardım takdir edilecektir. HasValue özelliği false olduğunda Nullable.Value özelliğine erişmek eğer

using (var db = new DataClasses1DataContext()) 
{ 
    var fill = (from f in db.expenseHdrs 
       where f.rptNo == getPkRowReport() 
       select f).FirstOrDefault(); 

    txtReportDesc.Text = fill.description; 
    txtPeriod.Text = fill.period; 
    txtPurpose.Text = fill.purpose; 

    bool travel = fill.travel.Value; 
    chkTravel.Checked = travel 
} 
+0

'ne dönmek getPkRowReport' gelmez .NET 4 kullanıyorsanız

bool travel; bool? temptravel = fill.travel.Value; if(temptravel == true) travel = true; else travel = false; 

Ya da sadece Val Bakhtin'in çözümü kullanın: Bu durum açıklığa kavuşturmak için

, bu kodu düşünün? –

+8

Bu fill.travel bir nullable bool ('bool?') Gibi geliyor ve veritabanında NULL. – driis

+1

@driis, bu cevap, bu yüzden aşağıya taşıyabilirsiniz. –

cevap

30

Her zaman (yanlış) varsayılan veya veritabanından boole sütunun değerini sağlamak

fill.travel.GetValueOrDefault() 

geçebilirsiniz. Ya da varsayılanı aşırı yük ile belirtebilirsiniz. Her iki durumda da, nullable şu anda bir değere sahip değil, bu yüzden bu istisnayı aldınız.

3

Bir InvalidOperationException alacak.

3

null değişkeni şuna benzer bazı değeri varsa senin değerini fiilen

if(fill.travel.HasValue) 
{ 
    bool travel = fill.travel.Value; 
} 
2

veritabanından gelen değeri null bir boolean erişmeden önce kontrol edebilirsiniz. Nullable.Value aradığınızda ve değer boş olduğunda, bu özel durum alırsınız. Aramadan önce Nullable.HasValue özelliğini kontrol etmeyi düşünün.

Sen varolmayan nesneden özelliğine erişmeye çalışan
3

(sizin fill.travel boş olduğunu ve ondan pervane çağırarak) kullanarak, kaynaşabilecek operatörünü kullanabilirsiniz (Net 4.0):

bool travel = fill.travel ?? false;