C# 在ArcGIS引擎中编辑blob字段时出错

C# 在ArcGIS引擎中编辑blob字段时出错,c#,arcgis,esri,C#,Arcgis,Esri,我有一个由MSSQL数据库支持的GIS层。该层上的特征有一个ESRIFELDTYPESTRING类型的字段和一个ESRIFELDTYPEBLOB类型的字段。我可以很好地编辑字符串字段,但是,当我尝试编辑blob时,StopEditOperation()会抛出一个非常一般的异常(消息:“调用COM组件时返回错误HRESULT E_FAIL.”,错误代码:-2147467259)。我在服务器日志中找不到任何相关内容。有人知道发生了什么事吗 IServerContext serverContext =

我有一个由MSSQL数据库支持的GIS层。该层上的特征有一个ESRIFELDTYPESTRING类型的字段和一个ESRIFELDTYPEBLOB类型的字段。我可以很好地编辑字符串字段,但是,当我尝试编辑blob时,StopEditOperation()会抛出一个非常一般的异常(消息:“调用COM组件时返回错误HRESULT E_FAIL.”,错误代码:-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();

首先,您很可能在ESRI论坛上获得更好的反馈,因为您的问题非常具体

我似乎还记得我对blob也有类似的问题,只看它们,不给它们写信。在我的例子中,我使用循环游标来检索特征引用,使用非循环游标来解决它。我假设这不是您的情况,因为您正在执行编辑,这要求您使用非循环游标。或者,您可以直接从图层获取对要素的引用,这根本不涉及您部件上的游标


您使用MemoryBlobStream的ImportFromVariant的方式很好,我看不出有任何问题。我将首先测试在个人或文件地理数据库中编辑blob时是否会出现相同的问题。

尝试从编辑会话中获取该功能

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

放弃对在编辑会话边界处检索到的行对象的所有引用(启动时)。如果跨编辑操作保留对行对象的引用,则放弃所有引用和重蚀刻对象

另外,请尝试以下内容末尾的建议: