运用.net将shp导入SDE数据库出现报错

skydish 2016-09-05 04:47:08
报的错误是DBMS TABLE NOT FOUND [ORA04043] 对象xxxxx不存在
我手头上有三个shp数据 有一个是可以成功导入的,另外两个都报上面那个错误。



/// <summary>
/// shp数据导入sde数据库
/// </summary>
/// <param name="pDataSet">所连接的sde数据库</param>
/// <param name="strDirFileName">所打开shp文件的父目录</param>
/// <param name="strShpName">shp带后缀的文件名</param>
/// <param name="strShpExtenName">shp无后缀的文件名</param>
/// <param name="isWorkspace"></param>
/// <returns></returns>
public bool FeatureClassToFeatureClass(IDataset pDataSet, string strDirFileName, string strShpName, string strShpExtenName, bool isWorkspace)
{
try
{
IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pFeatureWK = (IFeatureWorkspace)pWSF.OpenFromFile(strDirFileName, 0);
IFeatureClass pInFeatureClass = pFeatureWK.OpenFeatureClass(strShpName);
if (pInFeatureClass == null || pDataSet == null)
{
MessageBox.Show("创建失败");
return flag=false;
}
IFeatureClassName pInFeatureclassName;
IDataset pIndataset = (IDataset)pInFeatureClass;
pInFeatureclassName = (IFeatureClassName)pIndataset.FullName;
//如果名称已存在
IWorkspace2 pWS2 = null;
if (isWorkspace)
pWS2 = pDataSet as IWorkspace2;
else
pWS2 = pDataSet.Workspace as IWorkspace2;
if (pWS2.get_NameExists(esriDatasetType.esriDTFeatureClass, strShpExtenName))
{
DialogResult result;
result = System.Windows.Forms.MessageBox.Show(null, "矢量文件名 " + strShpExtenName + " 在SDE数据库中已存在!" + "是否覆盖?", "相同文件名", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
//覆盖原矢量要素
if (result == DialogResult.Yes)
{
IFeatureWorkspace pFWS = (IFeatureWorkspace)pWS2;
IDataset pDataset = pFWS.OpenFeatureClass(strShpExtenName) as IDataset;
pDataset.Delete();
pDataset = null;
}
}
IFields pInFields, pOutFields;
IFieldChecker pFieldChecker = new FieldCheckerClass();
IEnumFieldError pError;
pInFields = pInFeatureClass.Fields;
pFieldChecker.Validate(pInFields, out pError, out pOutFields);
IField geoField = null;
for (int i = 0; i < pOutFields.FieldCount; i++)
{
IField pField = pOutFields.get_Field(i);
if (pField.Type == esriFieldType.esriFieldTypeOID)
{
IFieldEdit pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = pField.AliasName;
}
if (pField.Type == esriFieldType.esriFieldTypeGeometry)
{
geoField = pField;
break;
}
}
IGeometryDef geometryDef = geoField.GeometryDef;
IFeatureDataConverter one2another = new FeatureDataConverterClass();
IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
IDatasetName pOutDatasetName = (IDatasetName)pOutFeatureClassName;
if (isWorkspace)
pOutDatasetName.WorkspaceName = (IWorkspaceName)pDataSet.FullName;
else
pOutDatasetName.WorkspaceName = (IWorkspaceName)((IDataset)pDataSet.Workspace).FullName;
pOutDatasetName.Name = strShpExtenName;
if (isWorkspace)
{
one2another.ConvertFeatureClass(pInFeatureclassName, null, null, pOutFeatureClassName, geometryDef, pOutFields, "", 1000, 0);
}
else
{
IFeatureDataset pFeatDS = (IFeatureDataset)pDataSet;
IFeatureDatasetName pOutFeatDSName = pFeatDS.FullName as IFeatureDatasetName;
one2another.ConvertFeatureClass(pInFeatureclassName, null, pOutFeatDSName, pOutFeatureClassName, geometryDef, pOutFields, "", 1000, 0);
pOutFeatDSName = null;
pFeatDS = null;
}
return flag=true;//入库成功则将shp数据导入到Oracle的土地权属信息表中
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return flag=false;
}
}


...全文
528 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
skydish 2016-09-05
  • 打赏
  • 举报
回复
找到原因了 那两个导入失败的文件的文件名里面都有数字 把数字去掉就OK了
skydish 2016-09-05
  • 打赏
  • 举报
回复
自己顶一下~

2,141

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧