ArcEngine 将sde的要素类数据导入到另外一个sde,用哪个接口可以实现?

之前用的IFeatureDataConverter,可实现将shp文件,gdb的文件导入到sde,现在要还是用IFeatureDataConverter这个接口,将一个sde的数据(数据集,要素类)导入到另一个sde,但是出现了错误:System.Runtime.InteropServices.COMException(0x80040203):该实现不支持此操作。 [不允许跨数据库边界执行 DDL 操作。]

TIM截图20180803130903.jpg

 
代码如下
 
public class ClsImportClass
{
public static void ConvertFeatureClass2FeatureDataset(IWorkspace sourceWorkspace,IWorkspace targetWorkspace,IFeatureDatasetName targetFDN,string nameOfSourceFeatureClass,string nameOfTargetFeatureClass)
{
//创建源工作空间名
IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;
IWorkspaceName sourceWorkspaceName = sourceWorkspaceDataset.FullName as IWorkspaceName;

//创建源数据集名称
IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
IDatasetName sourceDatasetName = sourceFeatureClassName as IDatasetName;
sourceDatasetName.WorkspaceName = sourceWorkspaceName;
sourceDatasetName.Name = nameOfSourceFeatureClass;

//创建目标工作空间名称
IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName targetWorkspaceName = targetWorkspaceDataset.FullName as IWorkspaceName;

//创建目标数据集名称
IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
IDatasetName targetDatasetName = targetFeatureClassName as IDatasetName;
targetDatasetName.WorkspaceName = targetWorkspaceName;
targetDatasetName.Name = nameOfTargetFeatureClass;

//打开输入要素类获取字段定义
IName sourceName = sourceFeatureClassName as IName;
IFeatureClass sourceFeatureClass = sourceName.Open() as IFeatureClass;

//验证字段
IFieldChecker fieldChecker = new FieldCheckerClass();
IFields targetFeatureClassFields;
IFields sourceFeatureClassFields = sourceFeatureClass.Fields;
IEnumFieldError enumFieldError;

//设置输入和有效的工作空间
fieldChecker.InputWorkspace = sourceWorkspace;
fieldChecker.ValidateWorkspace = targetWorkspace;
fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError,out targetFeatureClassFields);

//获取几何字段
IField geometryField;
for(int i = 0; i < targetFeatureClassFields.FieldCount; i++)
{
if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
{
geometryField = targetFeatureClassFields.get_Field(i);
IGeometryDef geometryDef = geometryField.GeometryDef;

IGeometryDefEdit targetFCGeoDefEdit = geometryDef as IGeometryDefEdit;
targetFCGeoDefEdit.GridCount_2 = 1;
targetFCGeoDefEdit.set_GridSize(0, 0);
targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;

//转换所有要素
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "";

//加载要素类
IFeatureDataConverter fctofc = new FeatureDataConverterClass();
IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, targetFDN, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);

break;
}
}

}
}
看这异常的意思是IFeatureDataConverter不支持sde间数据的导入,请教用哪个接口可以实现sde间数据的导入操作呢?
 
已邀请:

朱新颖

赞同来自: 柚子

这个接口是可以SDE到SDE的复制的,但是仅支持简单要素类的复制,如果涉及拓扑、几何网络等复杂对象是不支持的,另外,您试下同样数据ArcMap是否可以成功导入?

要回复问题请先登录注册