백그라운드 작업으로 데이터베이스에 데이터를로드하는 응용 프로그램이 있습니다. 값은 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
...
어떤 줄에서 예외가 발생합니까? 어떤 일이 생길 때'null' (또는'Nothing')인가? – David
@David, 디버거가 멈추는 줄은 '핀이 (i). 위치가 아무것도 없다면'입니다. 그러나이 필드가 값을 가질 때 발생합니다. 필드가 실제로 null 일 때 ""를 할당해야합니다. – mack
'pin (i) .Position'이'Nothing'인지 확인하고 있지만'pin (i)'자체를 검사하지 않습니다. * that *이 'Nothing'이면 예외가 발생합니다. – David