【问题标题】:Error editing a blob field in ArcGIS Engine在 ArcGIS Engine 中编辑 blob 字段时出错
【发布时间】:2010-12-13 11:29:53
【问题描述】:

我有一个由 MSSQL 数据库支持的 GIS 层。例如,图层上的特征有一个 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();

【问题讨论】:

    标签: c# arcgis esri


    【解决方案1】:

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

    我似乎记得我在使用 BLOB 时遇到过类似的问题,只读取它们,而不是写入它们。在我的情况下,我使用回收游标来检索功能引用,使用非回收游标解决了它。我认为这不是您的情况,因为您正在执行编辑,这需要您使用非循环光标。或者您可能直接从图层中获取对您的功能的引用,这完全不涉及您的光标。

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

    【讨论】:

      【解决方案2】:

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

      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 上)检索到的行对象的所有引用。如果在编辑操作中将保留对行对象的引用,则丢弃所有引用并重新获取对象..

      也可以试试末尾的建议:

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

      【讨论】:

        猜你喜欢
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        • 2019-03-07
        • 1970-01-01
        • 2017-04-23
        • 2010-10-15
        相关资源
        最近更新 更多