ArcEngine 将sde的要素类数据导入到另外一个sde,用哪个接口可以实现?
之前用的IFeatureDataConverter,可实现将shp文件,gdb的文件导入到sde,现在要还是用IFeatureDataConverter这个接口,将一个sde的数据(数据集,要素类)导入到另一个sde,但是出现了错误:System.Runtime.InteropServices.COMException(0x80040203):该实现不支持此操作。 [不允许跨数据库边界执行 DDL 操作。]
代码如下
代码如下
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间数据的导入操作呢?
1 个回复
朱新颖
赞同来自: 柚子
要回复问题请先登录或注册