2009-11-05 5 views
2

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

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(); 

ответ

1

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

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

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

+0

Я попытался их форумы первым, но не удачи. –

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^