2010-03-08 4 views
5

Where 절에있는 행을 명시 적으로 필터링 할 때 다음 쿼리가 배럴의 값이 NULL 인 행에 대해 아래의 오류를 발생시키는 이유는 무엇입니까? LINQ로 DBNull 필터링

Dim query = From row As dbDataSet.conformalRow In dbDataSet.Tables("conformal") _ 
      Where Not IsDBNull(row.Cal) AndAlso tiCal_drop.Text = row.Cal _ 
      AndAlso Not IsDBNull(row.Tran) AndAlso tiTrans_drop.Text = row.Tran _ 
      AndAlso Not IsDBNull(row.barrel) _ 
      Select row.barrel 
If query.Count() > 0 Then tiBarrel_txt.Text = query(0) 

Run-time exception thrown : System.Data.StrongTypingException - The value for column 'barrel' in table 'conformal' is DBNull.

어떻게 내 쿼리/상태는 내가 의도 한대로 작동하도록 다시 작성해야합니까?

답변

7

기본적으로 강력한 형식의 데이터 집합에서 필드가 null 인 경우 속성은 해당 예외를 throw합니다.

Dim query = From row As dbDataSet.conformalRow In dbDataSet.Tables("conformal") _ 
      Where Not row.IsCalNull() AndAlso tiCal_drop.Text = row.Cal _ 
      AndAlso Not row.IsTranNull() AndAlso tiTrans_drop.Text = row.Tran _ 
      AndAlso Not row.IsbarrelNull() _ 
      Select row.barrel 
If query.Count() > 0 Then tiBarrel_txt.Text = query(0) 

또는 DataRow.IsNull 방법 :

Dim query = From row As dbDataSet.conformalRow In dbDataSet.Tables("conformal") _ 
      Where Not row.IsNull("Cal") AndAlso tiCal_drop.Text = row.Cal _ 
      AndAlso Not row.IsNull("Tran") AndAlso tiTrans_drop.Text = row.Tran _ 
      AndAlso Not row.IsNull("barrel") _ 
      Select row.barrel 
If query.Count() > 0 Then tiBarrel_txt.Text = query(0) 
+1

Is [Field] Null() 메서드가 완벽하게 작동했습니다. 감사! – Steven

0

이 나를 위해 일한 당신은 생성 된 Is[Field]Null 방법을 사용해야합니다.

Dim query = From row As dbDataSet.conformalRow 
     In dbDataSet.Tables("conformal") _ 
     Where row.Cal.Length > 0 AndAlso tiCal_drop.Text = row.Cal _ 
      AndAlso row.Tran.Length > 0 AndAlso tiTrans_drop.Text = row.Tran _ 
      AndAlso row.barrel.Length > 0 _ 
     Select row.barrel