Mehr

Problem mit Schemasperre bei Verwendung von ITable.AddField über ArcObjects


Während eines Prozesses, den ich ausführe, muss ich manchmal ein Feld erstellen, das in einer Attributtabelle fehlt. Leider beschwert sich das Programm, dass die Tabelle, der ich das Feld hinzufüge, eine Schemasperre von hat das Programm selbst. Also habe ich versucht, das hinzuzufügenISchemaLockMethode zum Gewähren einer exklusiven Sperre und ich erhalte jetzt den HRESULT-Fehler0x8004022Dbeim Versuch, das Schloss zu wechseln. So sieht der Code aus.

privat void DoWork() { IWorkspace workspace = getWorkspacefromPath(workspacepath); IFeatureWorkspace fWorkspace = (IFeatureWorkspace)Arbeitsbereich; IFeatureClass fc = fWorkspace.OpenFeatureClass(Zieldatei); if (fc == null) { MessageBox.Show("Keine Feature-Class gefunden.", "Fehler."); Rückkehr; } ITable-Tabelle = (ITable)fc; int index = table.FindField("PSTATE"); if (index == -1) { ISchemaLock schemaLock = (ISchemaLock)Tabelle; settesttext("Kein PSTATE-Feld gefunden. Feld wird jetzt hinzugefügt."); try { schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock); table.AddField(fielddata()); } catch (Ausnahmefehler) { MessageBox.Show("Fehler bei der Felderstellung. Schließvorgang." + "
 " + error.Message); Rückkehr; } endlich { schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock); } settesttext("Felderstellung abgeschlossen"); index = table.FindField("PSTATE"); }

Wie sollte ich das Feld hinzufügen, um ein Problem mit der Schemasperre zu vermeiden?


Es scheint, dass die Sperre auf dieIFeatureWorkspaceAufrechterhaltung eines Verweises auf die Datei GDB, die ich verwendet habe.

Hinzufügen…

fArbeitsbereich = null; GC.Collect();

nach dem Erstellen derIFeatureClassInstanz hat den Trick gemacht. Danke @ blah238 dafür, dass ich den Arbeitsbereich in Betracht gezogen habe.


Schau das Video: ArcGIS Data Mgmt Part 1: Create, update, and manage asset information using ArcGIS Desktop (Oktober 2021).