【二次开发】CityMaker数据操作——删除

**

数据删除

**

一、原理

数据库删除有两种方式,一种通过Update游标的DeleteRow()方法删除当前行。删除行时,需要通过NextRow将游标移动到指定列。一种通过ITable的Delete(IQueryFilter)方法,删除符合条件的对象,返回删除的记录个数。该方法会把该要素所有相关的时态都删除。如果该记录添加了附件,附件不会一起被删掉,需要调用附件相关接口手动删除。

二、实现代码

1. .net

private void DeleteRowBuf(){
   foreach (IFeatureClass fc in fclist)
    {
         //(1)ITable::Delete()方法
         IQueryFilter filter0 = new QueryFilter();
         filter0.WhereClause = "Name like '%jwsz04%'";
         int nRet = fc.Delete(filter0);

         //(2)通过Update游标对象DeleteRow()方法
         IQueryFilter filter = new QueryFilter();
         filter.WhereClause = "Name='paizi'" ;
         IFdeCursor cursor = fc.Update(filter);//使用Update游标
         if (cursor != null)
         {
                IRowBuffer rbuffer = null;
                while ((rbuffer = cursor.NextRow()) != null)//调用NextRow()将游标移到待更新的当前行
                {
                     cursor.DeleteRow();//删除行

                }
         }
         this.axRenderControl1.FeatureManager.RefreshFeatureClass(fc);//刷新场景
    }
 }

2. JS

function deleteDB(){
	arryFcList.forEach(function(fc){
	    //(1)ITable::Delete()方法
	    var filter0 = __g.new_QueryFilter;
	    filter0.WhereClause = "Name like '%jwsz04%'";
	    fc.delete(filter0);
	    
	    //(2)通过Update游标对象DeleteRow()方法
		var filter = __g.new_QueryFilter;
		filter.whereClause = "Name='tree_2017'";
		var cursor = fc.update(filter);
		var fdeRow = null;
		if ((fdeRow = cursor.nextRow()) != null) {
		    cursor.deleteRow();
		    alert("删除成功");
	    }		   
	 })    
}

三、实现效果

【二次开发】CityMaker数据操作——删除

四、注意事项

使用游标DeleteRow()方法删除当前行时,游标类型必须为Update。