GDB中不能已经存在要素类名称,否则报错
/// <summary>
/// shp导入数据GDB
/// </summary>
/// <param name="pSourceFeatureClass">shp要素类</param>
/// <param name="pQueryFilter">过滤器</param>
/// <param name="directory">GDB路径</param>
/// <param name="datasetName">要素数据集名称</param>
/// <param name="className">要素类名称</param>
/// <returns>导入是否成功</returns>
private bool Import(IFeatureClass pSourceFeatureClass, IQueryFilter pQueryFilter, string directory, string datasetName, string className)
{
// 源数据工作空间(SHP)
IDataset pSourceDataset = pSourceFeatureClass as IDataset;
IFeatureClassName pSourceFeatureClassName = pSourceDataset.FullName as IFeatureClassName;
IWorkspace pSourceWorkspace = pSourceDataset.Workspace;
// 目标数据工作空间(GDB)
IWorkspaceFactory pTargetWorkspaceFactory = new FileGDBWorkspaceFactory();
IWorkspace pTargetWorkspace = pTargetWorkspaceFactory.OpenFromFile(directory, 0);
IFeatureWorkspace pTargetFeatureWorkspace = pTargetWorkspace as IFeatureWorkspace;
// 若要素数据集名称不为空,则获取该数据集
IFeatureDatasetName pTargetFeatureDatasetName = null;
if (!string.IsNullOrWhiteSpace(datasetName))
{
pTargetFeatureDatasetName = pTargetFeatureWorkspace.OpenFeatureDataset(datasetName).FullName as IFeatureDatasetName;
}
// 设置目标数据属性
IDataset pTargetDataSet = pTargetWorkspace as IDataset;
IWorkspaceName pTargetWorkspaceName = pTargetDataSet.FullName as IWorkspaceName;
IFeatureClassName pTargetFeatureClassName = new FeatureClassName() as IFeatureClassName;
IDatasetName pTargetDatasetName = pTargetFeatureClassName as IDatasetName;
pTargetDatasetName.WorkspaceName = pTargetWorkspaceName;
pTargetDatasetName.Name = className;
// 检查字段
IFieldChecker pFieldChecker = new FieldChecker();
pFieldChecker.InputWorkspace = pSourceWorkspace;
pFieldChecker.ValidateWorkspace = pTargetWorkspace;
// 字段转换
IFields pSourceFields = pSourceFeatureClass.Fields;
IFields pTargetFields = null;
IEnumFieldError pEnumFieldError = null;
pFieldChecker.Validate(pSourceFields, out pEnumFieldError, out pTargetFields);
// 数据转换
IFeatureDataConverter pFeatureDataConverter = new FeatureDataConverter();
try
{
pFeatureDataConverter.ConvertFeatureClass(pSourceFeatureClassName, pQueryFilter, pTargetFeatureDatasetName, pTargetFeatureClassName, null, pTargetFields, "", 1000, 0);
return true;
}
catch
{
return false;
}
}