1

I am using vb.net arcmap add-in.

I encounter a System.NullReferenceException error and cause arcmap crash. The workflow in my vb.net code is:

(1) create a ShapefileWorkspaceFactory

(2) use the workspace to open a DBF file as ITable

(3) loop through each record and get related value

The code I am using:

    Dim pWSF As ShapefileWorkspaceFactory = New ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory()
    Dim pWS As ESRI.ArcGIS.Geodatabase.IWorkspace = pWSF.OpenFromFile("D:/dev/local", 0)
    Dim pFws As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace = CType(pWS, ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)
    Dim pTable As ESRI.ArcGIS.Geodatabase.ITable = pFws.OpenTable("Segment_line_intersect")
    Dim pCur As ESRI.ArcGIS.Geodatabase.ICursor = pTable.Search(Nothing, False)
    Dim queryFilter As IQueryFilter = New QueryFilterClass()
    Dim pFieldIndex1 As Integer = pTable.Fields.FindField("Segment_ID")
    Dim pFieldIndex2 As Integer = pTable.Fields.FindField("DrainName")

    Dim pRow As ESRI.ArcGIS.Geodatabase.IRow = pCur.NextRow
    Dim SegmentID As String
    Dim DrainName As String

    Do Until pRow Is Nothing
        pRow = pCur.NextRow

        SegmentID = pRow.Value(pFieldIndex1)
        DrainName = pRow.Value(pFieldIndex2)

        MsgBox("SegmentID = " + SegmentID)
        MsgBox("DrainName = " + DrainName)

    Loop

All the values of SegmentID and DrainName can be retrieved correctly, but once all the values retrieved, the map crash. I use debug mode to track the error and get 'System.NullReferenceException' error.

I believe there is something wrong with my code, but I cannot tell what cause the issue.

I am using arcmap 10.2.2.

3

This line:

pRow = pCur.NextRow

should be at the end of your loop

Do Until pRow Is Nothing

    SegmentID = pRow.Value(pFieldIndex1)
    DrainName = pRow.Value(pFieldIndex2)

    MsgBox("SegmentID = " + SegmentID)
    MsgBox("DrainName = " + DrainName)

    pRow = pCur.NextRow

Loop

I think it's failing because you're trying to retrieve a value when pRow is null. Plus you were skipping the first record of your table because you called NextRow twice before starting your logic.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.