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– George Silva2011年05月11日 17:45:28 +00:00Commented May 11, 2011 at 17:45
-
Using a COM releaser, search cursor, and feature.store did the trick, thanks George.Duncan Rager– Duncan Rager2011年05月11日 19:06:44 +00:00Commented May 11, 2011 at 19:06
2 Answers 2
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
Did you tried to use IFeature.Store instead of ICursor.Update?