一、 幾種删除方法代碼
1. 查詢結果中删除
private void Delete1(IFeatureClass PFeatureclass)
{
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
IFeatureCursor pFeatureCursor = PFeatureclass.Search(pQueryFilter, false); IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null)
{
pFeature.Delete();
pFeature = pFeatureCursor.NextFeature();
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
}
2. 更新遊标删除
private void Delete2(IFeatureClass PFeatureclass)
{
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
IFeatureCursor pFeatureCursor = PFeatureclass.Update(pQueryFilter, false);
IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null)
{
pFeatureCursor.DeleteFeature();
pFeature = pFeatureCursor.NextFeature();
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
}
3. 使用DeleteSearchedRows删除
private void Delete4(IFeatureClass PFeatureclass)
{
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
ITable pTable = PFeatureclass as ITable;
pTable.DeleteSearchedRows(pQueryFilter);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
}
4. ExecuteSQL删除
private void Delete4(IFeatureClass PFeatureclass)
{
IDataset pDataset = PFeatureclass as IDataset;
pDataset.Workspace.ExecuteSQL("delete from " + PFeatureclass.AliasName + " where objectid<=" + DeleteNum);
}
二、 測試性能和比較
1、 相同的資料條件,删除2000條記錄
2、 測試代碼
IFeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;
IFeatureClass PFeatureClass = pFeatureLayer.FeatureClass;
System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch();
MyWatch.Start();
Delete1(PFeatureClass)
//Delete2(PFeatureClass);
//Delete3(PFeatureClass);
//Delete4(PFeatureClass);
//Delete5(PFeatureClass);
MyWatch.Stop();
MessageBox.Show("删除時間:" + MyWatch.ElapsedMilliseconds.ToString() + "毫秒");
3、 測試情況
測試方法
第一次時間(機關ms)
第一次時間(機關ms)
1
5214ms
5735ms
2
299ms
290Ms
3
59ms
28ms
4
26ms
26ms
三、 結論
1、 使用ExecuteSQL删除最快,資料庫的效率最高。
2、 DeleteSearchedRows和ExecuteSQL屬于批量删除,性能較優。
3、 查詢結果中删除,速度最慢,如果你使用這種方法,建立你馬上修改你的程式,因為你在浪費時間。
4、 小資料量記錄數小于500000條,請使用DeleteSearchedRows或ExecuteSQL,否則使用更新遊标删除(方法2),加上進度條,這樣界面很友好。
轉載保留版權://by yl [email protected] 2008.7.8
本篇文章來源于 GIS空間站 轉載請以連結形式注明出處 網址:http://www.gissky.net/Article/1644.htm
轉載于:https://www.cnblogs.com/jiejie/archive/2012/05/16/2504109.html