4

I have a script in VB.Net for grabbing values from one feature and assigning them to another. It works fine on shapefiles, but upon importing the same shapefiles into a file geodatabase, I get an error thrown at me.

Try
    'Start edit operation
    pEditor.StartOperation()

    'Update the new fields with the correct values
    pFeature.Value(pFeature.Fields.FindField("ReachCode")) = strReach
    pFeature.Value(pFeature.Fields.FindField("Measure")) = dblMeas
    pFCursor.UpdateFeature(pFeature)

    'End edit operation
    pEditor.StopOperation("UpdateFields")

    pFeature = pFCursor.NextFeature

Catch e As Exception
    'Cancel edits and exit loop
    pEditor.AbortOperation()
    MsgBox("There has been an error... edits will not be saved.", MsgBoxStyle.Exclamation, "Error")
    pEditor.StopEditing(False)
    Exit Sub
End Try

The loop is an update cursor for the feature class. When working in the geodatabase, the first update is applied fine, but when it reaches the "pFCursor.UpdateFeature(pFeature)" in the second loop, it throws this error:

"The cursor has been invalidated because the edit operation has stopped"

Is there some syntax change when working in geodatabases with respect to starting and stopping editing operations?

  • did you tried to use a regular cursor and feature.Store() ? – George Silva May 11 '11 at 17:45
  • Using a COM releaser, search cursor, and feature.store did the trick, thanks George. – Duncan Rager May 11 '11 at 19:06
3

Did you tried to use IFeature.Store instead of ICursor.Update?

4

Solved, as per George's comment...

Using ComReleaser As ComReleaser = New ComReleaser
    Dim pFCursor As IFeatureCursor = pFClass.Search(Nothing, False)
    ComReleaser.ManageLifetime(pFCursor)
    Dim pFeature As IFeature = pFCursor.NextFeature

    Do Until pFeature Is Nothing

        ...

        Try
            'Start edit operation
            pEditor.StartOperation()

            'Update the new fields with the correct values
            pFeature.Value(pFeature.Fields.FindField("ReachCode")) = strReach
            pFeature.Value(pFeature.Fields.FindField("Measure")) = dblMeas
            pFeature.Store()

            'End edit operation
            pEditor.StopOperation("UpdateFields")

            pFeature = pFCursor.NextFeature

        Catch e As Exception
            'Cancel edits and exit loop
            pEditor.AbortOperation()
            MsgBox("There has been an error... edits will not be saved.", MsgBoxStyle.Exclamation, "Error")
            pEditor.StopEditing(False)
            Exit Sub
        End Try
    Loop

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.