ArcEngine IWorkspaceEdit Interface
ArcGIS 官方文檔鏈接 http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/IWorkspaceEdit_Interface/002500000m5v000000/
ESRI都不對AO進行維護了,而且隨著ArcGIS產品版本的不斷更新,新的Lisence對於開發環境有著很苛刻的要求。所以從長遠來看,AO的開發會逐漸退出歷史舞臺,但對於剛開始接觸GIS開發的我來說,了解下還是很有必要的。
IWorkspaceEdit接口下的方法,它主要通過編輯操作和編輯會話對地理數據庫進行創建、修改、刪除等管理。官方幫助對其介紹的很詳細,在這就不贅述了。
IWorkspaceEdit的優點:
1、在編輯過程中如果發生異常,則在編輯之前的操作將會回滾,不會保存到數據庫中。(在沒有執行存儲命令之前,這句話有效)
2、利用UndoEditOperation 和 RedoEditOperation 方法,對已經停止編輯,但未保存的操作,進行撤銷和重做操作。
3、可以進行批量的更新(修改)操作,在對sde地理數據庫進行操作時,很大的發揮了性能優勢。
4、允許多用戶對一個地理數據庫進行編輯操作,在編輯過程中,用戶之間不會有影響。(保存編輯之後可能會有影響,這塊具體問題具體對待)
下面就是主要對StartEditing,StartEditOperation,StopEditing,StopEditOperation,AbortEditOperation方法簡單的說下,都是一些個人的見解。
1 public void CreateRowInEditSession(IWorkspace workspace, ITable table) 2 { 3 //投射workspace到IWorkspaceEdit接口 4 IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace; 5 6 // 開啟一個編輯會話 7 workspaceEdit.StartEditing(false); 8 9 // 開始一個編輯操作 10 workspaceEdit.StartEditOperation();11 12 // 創建表裏的一行數據 13 IRow row = table.CreateRow(); 14 row.Store(); 15 16 // 保存編輯操作 17 workspaceEdit.StopEditOperation(); 18 19 // 提交編輯操作 20 workspaceEdit.StopEditing(true); 21 }
StartEditing(bool withUndoRedo) 這裏參數需要說下,如果為true,則會創建撤銷和重做棧。如果不是必須的話,一般會為 false,這樣在性能上會提高一些。
StopEditOperation() 只是將操作過程保存了下來,並沒有將操作結果保存。只有當StopEditing(bool saveEdits) 的參數為true時才會將操作結果保存下來。
AbortEditOperation() 會中止一個操作,往往用在異常拋出之前,緊跟其後的是StopEditing(false) 。
當然,ArcObjects還提供了專門針對編輯的 ESRI.ArcGIS.Editor的Library,裏面涉及到很多接口、類,以及他們下面的方法、屬性。這些以後都回去了解下。
ArcEngine IWorkspaceEdit Interface