/**

* pDataSet:要导出的数据库的数据集,如果直接导入到数据库而不是数据集,则使用强制转换IWorkspace-->IDataset

* strFeatFileDir:要导入的shape文件所在目录

* strFeatFileName:要导入的shape文件名

* isWorkspace:标识是导入数据库还是数据集

*strOutName:存储于数据库的文件名

*failInfo:导入失败文件名

*errorDetail:错误信息

*skipInfo:发现重名情况跳过文件名

**/

public void FeatureClassToFeatureClass(IDataset pDataSet, string strFeatFileDir, string strFeatFileName, string strOutName, bool isWorkspace, ref string failInfo, ref string errorDetail, ref string skipInfo)

{

try

{

IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();

IFeatureWorkspace pFeatureWK = (IFeatureWorkspace)pWSF.OpenFromFile(strFeatFileDir, 0);

IFeatureClass pInFeatureClass = pFeatureWK.OpenFeatureClass(strFeatFileName);

if (pInFeatureClass == null || pDataSet == null)

{

if (failInfo == "")

{

failInfo = strFeatFileDir + "\\" + strFeatFileName;

errorDetail = "错误信息:" + strFeatFileDir + "是空的矢量工作空间。";

}

else

{

failInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;

errorDetail += ";" + "错误信息:" + strFeatFileDir + "是空的矢量工作空间。";

}

return;

}

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, strOutName))

{

DialogResult result;

result = System.Windows.Forms.MessageBox.Show(null, "矢量文件名  " + strOutName + "  在数据库中已存在!" + "\r是否覆盖?", "相同文件名", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

//覆盖原矢量要素

if (result == DialogResult.Yes)

{

IFeatureWorkspace pFWS = (IFeatureWorkspace)pWS2;

IDataset pDataset = pFWS.OpenFeatureClass(strOutName) as IDataset;

pDataset.Delete();

pDataset = null;

}

else if (result == DialogResult.No)

{

//不覆盖,则退出for循环,忽略这个要素,转入下一个要素的导入

if (skipInfo == "")

skipInfo = strFeatFileDir + "\\" + strFeatFileName;

else

skipInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;

return;

}

}

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 = strOutName;

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;

}

}

catch (Exception ex)

{

if (failInfo == "")

{

failInfo = strFeatFileDir + "\\" + strFeatFileName;

errorDetail = "错误信息:" + ex.Message;

}

else

{

failInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;

errorDetail += ";" + "错误信息:" + ex.Message;

}

Console.WriteLine(ex.Message);

return;

}

}

转载于:https://www.cnblogs.com/bluemaplestudio/archive/2010/04/13/1710747.html

导入shape文件到SDE数据库相关推荐

  1. 使用命令导入sql文件到mysql数据库时报Failed to open file错误的解决方案

    使用命令导入sql文件到mysql数据库时报Failed to open file错误的解决方案 参考文章: (1)使用命令导入sql文件到mysql数据库时报Failed to open file错 ...

  2. ExcelToMySQL-批量导入Excel文件到MySQL数据库的自动化工具

    ExcelToMySQL:批量导入Excel文件到MySQL数据库的自动化工具 简介 ExcelToMySQL 是一个可以批量导入excel到数据库(mysql/oracle/sqlserver)的自 ...

  3. ExcelToOracle:批量导入Excel文件到Oracle数据库的自动化工具

    ExcelToOracle:批量导入Excel文件到Oracle数据库的自动化工具 简介 ExcelToOracle 是一个可以批量导入excel到数据库(mysql/oracle/sqlserver ...

  4. 关于SQL server导入.mdf文件显示附加数据库时出错。有关详细信息,请单击“消息”列中的超链接

    关于SQL server导入.mdf文件显示附加数据库时出错.有关详细信息,请单击"消息"列中的超链接 问题原因 看了一下,应该是从别人那边拷过来的数据库文件没有本地操作系统的权限 ...

  5. 导入要素集到SDE数据库的方法以及使用GP工具的许可问题(转载)

    转自:http://blog.csdn.net/lk103852503/article/details/7496850 费话不说,先上代码 public static void shpFeatureC ...

  6. linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...

    本文首先讲解window下如何使用Navicat for MySQL导出表. 1.如下图所示,目标数据库是mydatabase,数据库中有四张表. 2.选中该数据库,右键--数据传输. 3.左边可以选 ...

  7. geoserver rest 导入shape文件错误

    使用rest接口导入shp文件时出错, java.io.ioexception: current fid index is null, next must be called before write ...

  8. 用sql dts导入mysql数据库,使用命令行导入sql文件到mysql数据库

    1.基本操作 show  dattabases; use tiku1; set chatset utf8; source  C:\Users\zy\Desktop\chuyi1\chuyi1.sql ...

  9. cmd 命令行 mysql导入sql文件到指定数据库

    1.mysql -uroot -proot 参考mysql -u用户名 -p密码    其中用户名和密码都是root 2.参看mysql中有哪些数据库,  show databases; 3.如果没有 ...

最新文章

  1. 京东主图怎么保存原图_京东自营怎么做?详解京东平台操作方法
  2. Quartz cron表达式
  3. Python学习之路7-函数
  4. 数据分析---《Python for Data Analysis》学习笔记【04】
  5. php curl ssr,php curl模拟登陆
  6. 解决win10 .net framework 3.5安装失败0x800f081f
  7. Java:选择排序法
  8. c语言程序设计点亮第一个LED,实验2__C语言程序设计及_LED跑马灯实验.ppt
  9. 怎么在github上下载项目_Github上Top20 Python与机器学习开源项目汇总
  10. oracle number +1,number number(1)
  11. 利用GDI+ for.NET 给图片加水印标记
  12. 数组的普通查找与折半查找
  13. android终端模拟器官方下载,Android 终端模拟器 | F-Droid - Free and Open Source Android App Repository...
  14. 成都市计算机会考考试题,成都市初中信息技术会考试题_第七套.docx
  15. [知识普及]世界知名洋酒
  16. 图像单通道和4通道转3通道
  17. Java 集合框架(5)---- Map 相关类解析(中)
  18. 分享一个开源的QT的串口示波器
  19. video标签的全部配置
  20. 管家婆软件库存周转率的解释及计算方式

热门文章

  1. 计算机网络安全基础知识笔记
  2. 程序语言基础:解释程序基本原理笔记
  3. MySQL数据库的mysqldump完全备份、binlog的增量备份与还原
  4. 10实用的JS实用技巧
  5. 在程序员面前千万不要说这9句话,我一个同事就死的很惨!
  6. 302状态码_http状态码是什么?301 302 404的SEO应用场景
  7. python爬知识星球付费数据_用python爬取知识星球
  8. 从零开发一个命令行脚手架工具 等
  9. 易思汇完成近亿元B轮融资,信中利投资
  10. 甘肃甘南步班邮递员:草原上的“递爱”艰途