修改字段名称需注意设置锁模式为执行模式锁(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;
}