Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
    
did you tried to use a regular cursor and feature.Store() ? – George 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
up vote 3 down vote accepted

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

share|improve this answer

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
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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