更新arcObjects中要素类中的字段

时间:2018-02-20 09:43:58

标签: c# arcgis arcobjects

我在ArcGIS中有图层(要素类)。数据在Oracle 11g上。

我尝试更新一行中的字段但是当我feature.store时出现错误

  

Class未获许可使用(HRESULT异常:0x80040112)

附加代码:

private void UpdateFeatures(IFeatureClass featureClass, IFeatureWorkspace featureWorkspace, List<FeatureValue> featureValues)
    {
        IFeatureCursor featureSearchCursor = null;
        IWorkspaceEdit workspaceEdit = null;
        try
        {
            workspaceEdit = (IWorkspaceEdit)featureWorkspace;
            workspaceEdit.StartEditing(false);

            // Start an edit operation and create a cursor.
            workspaceEdit.StartEditOperation();

            //IQueryFilter queryFilter = new QueryFilter();
            //queryFilter.WhereClause = "Code = '" + featureValues[i].FieldName + "'";
            //queryFilter.SubFields = "COMMENTS";

            featureSearchCursor = featureClass.Search(null, false);
            int fieldCodeIndex = featureClass.FindField("CODE");
            int fieldIndex = featureClass.FindField("MODEL");

            bool FieldEditable = featureWorkspace.OpenTable("Switch").Fields.get_Field(fieldIndex).Editable;

            // Iterate through the features, updating the Type values.

            IFeature feature = null;

            while ((feature = featureSearchCursor.NextFeature()) != null)
            {
                object obj = feature.get_Value(fieldCodeIndex);
                if (!(obj is DBNull))
                {
                    FeatureValue featureValue = featureValues.Where(x => x.FieldName == obj.ToString()).FirstOrDefault<FeatureValue>();
                    if (featureValue != null)
                    {
                        int val = featureValue.FieldValue;
                    }
                    object obj1 = "123";
                    feature.set_Value(fieldIndex,obj1);
                    feature.Store();
                    break;
                }

                //Console.WriteLine("The new type: {0}", feature.get_Value(fieldIndex));
            }
        }
        catch (COMException ex)
        {
            // Handle any errors that might occur on NextFeature().
            richTextBox1.AppendText(ex.Message);
        }
        catch (Exception ex)
        {
            //handle general Errors
            richTextBox1.AppendText(ex.Message);
        }
        finally
        {
            workspaceEdit.StopEditOperation();
            // Stop the edit session.
            workspaceEdit.StopEditing(true);
            // Stop the edit operation.

            // Since the edit operation is ending, release the cursor.
            Marshal.ReleaseComObject(featureSearchCursor);
        }
    }

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

检查是否使用了正确的ArcGis许可级别。 对于AddIn / Extension所使用的许可级别将是&#34; ArcGIS Administrator&#34;中设置的许可级别。当您拥有多个许可时,桌面基本版&#39;经常设置,许可级别不足以编辑SDE数据库。

此处描述了此类错误:ESRI Error: Not Licensed

如果您需要扩展程序,请确保已启用并获得许可。

对于使用ArcObjects的StandAlone应用程序,您需要自己初始化许可证。 为此我建议使用ESRI文档AoInitialize CoClassInitialize Method

样品应该能够提供帮助