2014-07-16 5 views
0

백그라운드 작업으로 데이터베이스에 데이터를로드하는 응용 프로그램이 있습니다. 값은 LINQ를 사용하는 데이터 테이블에서 검색되어 조작되고 새로운 데이터 테이블에 저장됩니다. 왜 NullReferenceException 오류가 발생하고 이유를 알아낼 수 없습니다. LINQ 쿼리에서 오는 값이 null인지 확인하고, 그렇다면 변수가 올바르게 할당되었는지 확인합니다. 그러나 LINQ 쿼리에 값이 포함되어 있으면 NullReferenceException "개체 참조가 개체 인스턴스로 설정되지 않았습니다."라는 오류가 발생합니다.이 오류는 실제로 저에게 의미가 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 질문에 대한 의견을 바탕으로LINQ에서 DataTable으로 값을 검색 할 때 NullReferenceException이 발생합니다.

Dim pin = (From u In partdata.AsEnumerable() _ 
       Where u.Field(Of String)("PART_GRP") = sPartType And 
       u.Field(Of String)("INVT_TYPE").Contains("A") 
       Select oid = u.Field(Of String)("ID"), Position = u.Field(Of Integer?)) 


Dim pout = (From u In partdata.AsEnumerable() _ 
       Where u.Field(Of String)("PART_GRP") = sPartType And 
       u.Field(Of String)("INVT_TYPE").Contains("B") Or u.Field(Of String)("INVT_TYPE").Contains("C") 
       Select oid = u.Field(Of String)("ID"), Position = u.Field(Of Integer?)) 

If pin.Count > 0 And pout.Count > 0 Then 

    For i = 0 To pout.Count - 1 
     ioidID = pout(i).oid 

     ' Parts In 
     If pin(i).Position Is Nothing Then ' When "Position" is Null, it works and "" is assigned. When "position" is not null, I get a NullReferenceException error on this line. 
      spinPosition = "" 
     Else 
      spinPosition = pin(i).Position 
     End If 
     ... 
+0

어떤 줄에서 예외가 발생합니까? 어떤 일이 생길 때'null' (또는'Nothing')인가? – David

+0

@David, 디버거가 멈추는 줄은 '핀이 (i). 위치가 아무것도 없다면'입니다. 그러나이 필드가 값을 가질 때 발생합니다. 필드가 실제로 null 일 때 ""를 할당해야합니다. – mack

+1

'pin (i) .Position'이'Nothing'인지 확인하고 있지만'pin (i)'자체를 검사하지 않습니다. * that *이 'Nothing'이면 예외가 발생합니다. – David

답변

0

, pin(i)Nothing 것 같습니다. 서로 관련이없는 두 개의 별도의 컬렉션으로 pinpout을 정의

pin(i).Position 

참고 : 당신이 여기에서 역 참조하려고 할 때 예외를 일으킬 것입니다.

If pin.Count > 0 And pout.Count > 0 Then 

하지만 그들이 값의 같은 번호가 포함되어 있는지 확인하지 : 당신은 그들이 모두 하나 개 이상의 값을 포함하는지 확인합니다. 이 여기에 가정 pout 이제까지 pin보다 더 많은 값을 포함

For i = 0 To pout.Count - 1 

경우, 코드가 실패합니다.

+0

아, 알았어, 너의 요점을 안다. 한 세트의 라인이 다른 세트보다 커지면 조사를 해봅시다. – mack

+0

도와 주셔서 감사합니다 @ David. 나는 그것이 지금 일하고 있다고 생각한다. – mack

관련 문제