Пример #1
0
        //删除FeatureClass中所有Feature
        public static void DeleteFeature(IFeatureClass pFeatureClass, string condtion, out Exception Error)
        {
            Error = null;
            if (pFeatureClass == null)
            {
                return;
            }
            IDataset       dataset       = pFeatureClass as IDataset;
            IWorkspace     workspace     = dataset.Workspace;
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.DisableUndoRedo();
            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();
            IFeatureCursor pFeatureCursor = null;

            if (condtion != "")
            {
                IQueryFilter pFilter = new QueryFilterClass();
                pFilter.WhereClause = condtion;
                pFeatureCursor      = pFeatureClass.Update(pFilter, false);
            }
            else
            {
                pFeatureCursor = pFeatureClass.Search(null, false);
            }
            IFeature pFeature = pFeatureCursor.NextFeature();
            int      count    = 0;

            try
            {
                while (pFeature != null)
                {
                    // pFeatureCursor.DeleteFeature();
                    pFeature.Delete();
                    count++;
                    if (count == 500)
                    {
                        pFeatureCursor.Flush();
                        count = 0;
                    }
                    pFeature = pFeatureCursor.NextFeature();
                }
                if (count > 0)
                {
                    pFeatureCursor.Flush();
                }
            }
            catch (Exception ex)
            {
                Error = ex;
            }

            System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);
        }
        public bool StartEditing(IWorkspace TheWorkspace, bool IsUnversioned) // Start EditSession + create EditOperation
        {
            bool IsFileBasedGDB =
                (!(TheWorkspace.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace));

            IWorkspaceEdit pWSEdit = (IWorkspaceEdit)TheWorkspace;

            if (pWSEdit.IsBeingEdited())
            {
                MessageBox.Show("The workspace is being edited by another process.");
                return(false);
            }

            if (!IsFileBasedGDB)
            {
                IMultiuserWorkspaceEdit pMUWSEdit = (IMultiuserWorkspaceEdit)TheWorkspace;
                try
                {
                    if (pMUWSEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMNonVersioned) && IsUnversioned)
                    {
                        pMUWSEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMNonVersioned);
                    }
                    else if (pMUWSEdit.SupportsMultiuserEditSessionMode(esriMultiuserEditSessionMode.esriMESMVersioned) && !IsUnversioned)
                    {
                        pMUWSEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                    }

                    else
                    {
                        return(false);
                    }
                }
                catch (COMException ex)
                {
                    MessageBox.Show(ex.Message + "  " + Convert.ToString(ex.ErrorCode), "Start Editing");
                    return(false);
                }
            }
            else
            {
                try
                {
                    pWSEdit.StartEditing(false);
                }
                catch (COMException ex)
                {
                    MessageBox.Show(ex.Message + "  " + Convert.ToString(ex.ErrorCode), "Start Editing");
                    return(false);
                }
            }

            pWSEdit.DisableUndoRedo();
            try
            {
                pWSEdit.StartEditOperation();
            }
            catch
            {
                pWSEdit.StopEditing(false);
                return(false);
            }
            return(true);
        }