#database #insert #gis #arcgis #esri-arc-engine
#База данных #вставить #гис #arcgis #esri-arc-engine
Вопрос:
Я пытаюсь добавить строку в базу геоданных ArcGIS, но я не хочу, чтобы для этой строки создавался автоматический идентификатор объекта. Я хочу вставить определенный идентификатор объекта. Я получаю сообщение об ошибке: поле недоступно для редактирования.
Мой код выглядит следующим образом:
feature = fclass.CreateFeature();
feature.setValue((int)_fields[i].targetIndex, tripValue);
Теперь, на первой итерации, _fields[i].targetIndex=0, потому что я хочу вставить конкретный идентификатор объекта.
Но первая итерация выдает ошибку, в то время как остальные в порядке.
Есть идеи о том, как как-то обойти автоматический идентификатор объекта?
Комментарии:
1. Кстати, причина, по которой мне нужен конкретный идентификатор объекта, заключается в том, что я синхронизирую данные из 2 разных баз данных. Итак, если исходная строка имеет идентификатор объекта 234324, я хочу сохранить его в целевой строке.
Ответ №1:
Краткий ответ:
Вы этого не делаете.
Длинный ответ:
Использование поля ObjectId в качестве уникального ключа (что, я полагаю, и есть то, что вы здесь делаете) обычно считается очень плохой идеей, поскольку это поле не такое статичное, как вы могли подумать — различные операции с набором данных будут переназначать их.
Один из ответов на этот вопрос предполагает, что копирование / вставка данных может привести к передаче идентификаторов объектов без изменений, если вы копируете данные откуда-то еще, но в противном случае вам следует создать другое поле для использования в качестве уникального ключа и оставить идентификатор объекта в покое.
(кстати, этот вопрос о базе геоданных получит гораздо более разумные ответы на GIS.SE .
Комментарии:
1. Спасибо за вашу помощь!
Ответ №2:
Идентификатор объекта является внутренним системным полем для ArcGIS, и я не должен его изменять. Как указано в справочной документации,
Идентификатор объекта используется ArcGIS для выполнения таких действий, как прокрутка, отображение наборов выделений и выполнение операций идентификации объектов.
Вместо этого я бы рекомендовал создать globalId, который также генерируется системой ArcGIS, но убедитесь, что каждый идентификатор уникален (подробнее см. Тип данных поля ArcGIS). globalId также поддерживает репликацию базы геоданных. Чтобы создать глобальный идентификатор, просто щелкните правой кнопкой мыши на ваших классах объектов в ArcCatalog и выберите Управление> Добавить глобальные идентификаторы…
Я также поддерживаю Juffy, что этот вопрос лучше задать по адресу GIS.SE .