Ошибка редактирования поля BLOB-объекта в ArcGIS Engine

2

У меня есть уровень GIS, поддерживаемый db MSSQL. Функции на слое имеют, скажем, одно поле типа esriFieldTypeString и одно из типов esriFieldTypeBlob. Я могу редактировать поле строки очень хорошо, но, когда я пытаюсь отредактировать blob, StopEditOperation() генерирует очень общее исключение (сообщение: "Ошибка HRESULT E_FAIL была возвращена из вызова COM-компонента"., Код ошибки: -2147467259). Я не мог найти ничего связанного в журнале сервера. Кто-нибудь знает, что происходит?

IServerContext serverContext = GetServerContext(agsConn, serviceName);
ILayer layer = GetILayer(layerName, serverContext);
IWorkspace workspace = GetIWorkspace(layer);

var feature = GetIFeature(objectId, workspace, layer);

var workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(false);
workspaceEdit.StartEditOperation();

var index = feature.Fields.FindField(featureDetailName);
IField field = feature.Fields.get_Field(index);
byte[] byteArray = {1, 2, 3};
MemoryBlobStream blob = new MemoryBlobStream();
((IMemoryBlobStreamVariant)blob).ImportFromVariant(byteArray);
if (field.CheckValue(blob))
{
    feature.set_Value(index, blob);
}

feature.Store();

workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);

serverContext.RemoveAll();
serverContext.ReleaseContext();
Теги:
arcgis
esri

2 ответа

1

Попробуйте получить эту функцию из своего сеанса редактирования.

var workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(false);
workspaceEdit.StartEditOperation();
var feature = GetIFeature(objectId, workspace, layer);

От http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IWorkspaceEdit.htm

Отменить все ссылки на объекты строк, полученные на границе сеанса редактирования (при запуске). Если ссылки на объекты строк будут поддерживаться в рамках операций редактирования, то отбросьте все ссылки и объекты refetch.

Также попробуйте предложение в конце:

http://forums.esri.com/Thread.asp?c=158&f=2281&t=241561

1

Во-первых, вероятно, вы, скорее всего, получите лучшую обратную связь на форумах ESRI, поскольку ваша проблема очень специфична.

Кажется, я помню, что у меня были подобные проблемы с BLOB, читая их, но не писал им. В моем случае я использовал курсор рециркуляции для извлечения ссылок на объекты, используя неперерабатывающий курсор, который решил его. Я предполагаю, что это не ваш случай, поскольку вы выполняете редактирование, что требует от вас использования неперерабатывающего курсора. Или, возможно, вы получаете ссылки на свои функции непосредственно из слоя, который вообще не содержит курсоров с вашей стороны.

Как вы используете MemoryBlobStream ImportFromVariant, все в порядке, я не вижу никаких проблем с этим. Сначала я бы проверил, возникает ли одна и та же проблема при редактировании блоба внутри личной или файловой базы геоданных.

  • 0
    Сначала я пробовал их форумы, но пока безуспешно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню