【二次开发】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("删除成功");
}
})
}
三、实现效果
四、注意事项
使用游标DeleteRow()方法删除当前行时,游标类型必须为Update。