• Arcgis Engine(ae)接口详解(4):featureClass的feature插入


                    //由于测试数据不完善,featureClass在此要只设null值,真实功能要设实际的值
                    IFeatureClass featureClass = null;
    
                    //获取某个字段的索引,后面取字段值用到
                    int xxxFieldIdx = featureClass.FindField("xxx");
    
                    //获取到IWorkspaceEdit接口,IWorkspaceEdit是编辑必须的接口
                    IWorkspaceEdit workspaceEdit = (featureClass as IDataset).Workspace as IWorkspaceEdit;
    
                    //开始编辑的两个重要方法,StartEditing第一个参数是是否允许Undo,Redo(重做,撤销),如果是后台数据处理功能一般关系不大
                    workspaceEdit.StartEditing(true);
                    //构成一个EditOperation有StartEditOperation和StopEditOperation方法,Undo,Redo是针对一个EditOperation的
                    workspaceEdit.StartEditOperation();
    
                    //插入要素不止一种方法,此例介绍的是游标插入法,优点是插入速度比较快
                    //注意此处的游标是插入游标,而不是之前查询功能的查询结果游标,他们接口是一样的,但是获取方式不同
                    IFeatureCursor featureCursorInsert = null;
                    //IFeatureBuffer跟IFeature用法差不多,可理解为专用于插入的feature
                    IFeatureBuffer featureBuffer = null;
    
                    //这里加try的原因是,如果编辑时出错,需要调用IWorkspaceEdit的一些方法来回滚修改内容
                    //而且编辑出错几率比一般功能大
                    try
                    {
                        //获取插入游标
                        featureCursorInsert = featureClass.Insert(true);
    
                        //模拟插入10条要素,当前实际功能不会这样写
                        for (int i = 0; i < 10; i++)
                        {
                            //创建featureBuffer
                            featureBuffer = featureClass.CreateFeatureBuffer();
    
                            //赋值的方式跟编辑一样
    
                            //修改属性字段的字段值
                            featureBuffer.Value[xxxFieldIdx] = "eee";
    
                            IPoint point = new PointClass();
                            point.PutCoords(111, 222);
                            //修改几何字段的字段值
                            //因为几何字段只有一个,所以不需要字段索引
                            featureBuffer.Shape = point;
    
                            //赋值后调用插入游标的InsertFeature方法完成插入一条记录
                            featureCursorInsert.InsertFeature(featureBuffer);
                        }
    
                        //保存编辑
                        //之前的feature.Store()和featureDelete.Delete()都是临时保存,下面两句才是真实的保存
                        workspaceEdit.StopEditOperation();
                        //参数1是是否保存,false就是不保存,也就是恢复到修改前的状态
                        workspaceEdit.StopEditing(true);
                    }
                    catch (Exception ex)
                    {
                        //编辑出错需要以下两句,大意是数据回滚
                        workspaceEdit.StopEditOperation();
                        workspaceEdit.StopEditing(false);
    
                        //此处不记录异常,把异常抛出让系统统一处理
                        throw new Exception("", ex);
                    }
  • 相关阅读:
    C​S​S3​:​transition与visibility
    CSS ::before 和 ::after 伪元素 进阶
    [转]达梦数据库报错:不能同时包含聚集KEY和大字段(text类型)
    [转].netcore webapi post参数长度超过最大限制
    efcore执行sql查询(无需定义dbset<model>)
    Rabbitmq的死信
    用Docker搭建RabbitMq的普通集群和镜像集群
    .NetCore在IdentityServer4因为Cookies的SameSite导致授权登录跳转回登录页的问题
    2021>2022
    js 宽高相关及其应用
  • 原文地址:https://www.cnblogs.com/cannel/p/11074320.html
Copyright © 2020-2023  润新知