日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

导入shape文件到SDE数据库

發布時間:2023/12/9 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 导入shape文件到SDE数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/**

?????? *?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数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。