修改字段名稱需注意設置鎖模式爲執行模式鎖(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;
}