ArcEngine修改字段名稱

修改字段名稱需注意設置鎖模式爲執行模式鎖(esriExclusiveSchemaLock),當其他應用已經鎖定要素類,不管是(esriExclusiveSchemaLock,還是esriSharedSchemaLock),都無法修改當前要素類鎖類型,即無法修改字段名稱。當字段修改完成後應該將當前的執行模式鎖(esriExclusiveSchemaLock)改爲共享鎖(esriExclusiveSchemaLock)。另外IClassSchemaEdit4接口還可以修改屬性域、字段缺省值(即默認值)等等,但是不支持字段長度修改。
以下是實現代碼:

/// <summary>
        /// 修改字段名稱
        /// </summary>
        /// <param name="pFeatureClass">目標要素類</param>
        /// <param name="oldFieldName">目標字段名稱</param>
        /// <param name="newFieldName">目標字段新名稱</param>
        /// <param name="aliasName">目標字段新別名</param>        
        private bool ModifyFieldName(IFeatureClass pFeatureClass, string oldFieldName, string newFieldName, string aliasName)
        {
            bool isModified = false;
            ISchemaLock pSchemaLock = null;
            try
            {
                IFields pFields = pFeatureClass.Fields;
                int fIndex = pFields.FindField(oldFieldName);
                if (fIndex == -1) return isModified;
                pSchemaLock = pFeatureClass as ISchemaLock;
                pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);//設置編輯鎖
                IClassSchemaEdit4 pClassSchemaEdit = pFeatureClass as IClassSchemaEdit4;
                pClassSchemaEdit.AlterFieldAliasName(oldFieldName, aliasName);
                pClassSchemaEdit.AlterFieldName(oldFieldName, newFieldName);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
               //釋放編輯鎖
pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock); 
                isModified = true;
            }
            return isModified;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章