將要素類轉IDataset再進行重命名,需要注意可能存在要素類被鎖和同名情況,因此要加CanRename判斷和catch。
需要注意以下兩點:
1、對SDE要素類進行重命名需要較高的開發權限,經過測試似乎只有將License綁定爲Advanced級別開發License【注:測試使用ArcGIS10.1系列產品,使用License控件進行驗證,ArcSDE for Oracle 11g】。如果沒有License驗證綁定的情況下對SDE要素類進行重命名,儘管沒有ArcMap等等其他應用程序Lock要素類,但是CanRename都會返回false。
2、使用接口IDataset進行Rename,僅僅是重命名Name,而AliasName需要通過IClassSchemaEdit進行修改要素類別名。也就是說用戶可以自由控制要素類的名稱和別名,但是如果不是業務的特殊要求,不建議隨意修改要素類名稱。
以下修改要素類名稱、別名代碼
/// <summary>
/// 修改要素類名稱(不修改別名)
/// </summary>
///<param name="newName">新要素類名</param>
///<param name="pFeatureClass">原要素類</param>
private bool RenameFeatureClassName(string newName, IFeatureClass pFeatureClass)
{
IDataset ds = pFeatureClass as IDataset;
bool isRename = false;
try
{
if (ds.CanRename())
{
ds.Rename(newName);
isRename = true;
}
}
catch
{
isRename = false;
}
return isRename;
}
/*****************************************************************************/
/// <summary>
/// 修改要素類名稱以及別名
/// </summary>
///<param name="newName">新要素類名</param>
///<param name="newAliasName">新要素類別名</param>
///<param name="pFeatureClass">原要素類</param>
private bool RenameFeatureClassName(string newName, string newAliasName, IFeatureClass pFeatureClass)
{
IDataset ds = pFeatureClass as IDataset;
bool isRename = false;
try
{
IClassSchemaEdit2 pClassSchemaEdit2 = pFeatureClass as IClassSchemaEdit2;
pClassSchemaEdit2.AlterAliasName(newAliasName);
if (ds.CanRename())
{
ds.Rename(newName);
isRename = true;
}
}
catch
{
isRename = false;
}
return isRename;
}