C# 代码实现 shp图层导入到 sde(arcgis连接的oracle),oracle连接参数,以及导入的方法

       连接sde(oracle数据库)server:localhost,instance:"sde:oracle$localhost:1521/"+实例;database:sde,也可以为空;user:oracle用户名;password:oracle该用户登录密码

 public IWorkspace workspace;

public IPropertySet propertySet;

 public void connection(string server,string instance,string database,string user,string password)
        {
            propertySet = new PropertySetClass();
            propertySet.SetProperty("server", server);//localhost
            string strInstance = @"sde:oracle$localhost:1521/" + instance;//
            propertySet.SetProperty("instance", strInstance);//如果不行可以尝试sde:oracle:1521/实例,ip/实例,localhost/实例
            propertySet.SetProperty("database", database);//sde     可无
            propertySet.SetProperty("user", user);
            propertySet.SetProperty("password", password);
           propertySet.SetProperty("version", "sde.DEFAULT");
            IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactory();
            workspace = workspaceFactory.Open(propertySet, 0);            
        }
       //矢量数据直接导入sde
        public bool importFToSDE(string FilePathFullName,string fileName)//fileName,在sde中创建的要素集的名字
        {
            try
            {
                IDataset pDataSet = workspace as IDataset;
                FileInfo fileInfo = new FileInfo(FilePathFullName);
                string filePath = fileInfo.DirectoryName;//路径,文件夹
                string file = fileInfo.Name;//文件名,带后缀的
                FeatureClassToFeatureClass(pDataSet, filePath, file, fileName, true);
                return true;
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
                return false;                
            }
        }

        public void FeatureClassToFeatureClass(IDataset pDataSet, string strFeatFileDir, string strFeatFileName, string strOutName, bool isWorkspace)
        {
            try
            {
                IWorkspaceFactory pWSF = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
                IFeatureWorkspace pFeatureWK = (IFeatureWorkspace)pWSF.OpenFromFile(strFeatFileDir, 0);
                IFeatureClass pInFeatureClass = pFeatureWK.OpenFeatureClass(strFeatFileName);
                if (pInFeatureClass == null || pDataSet == null)
                {
                    MessageBox.Show("创建失败");
                    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))
                {
                    System.Windows.Forms.DialogResult result;
                    result = System.Windows.Forms.MessageBox.Show(null, "矢量文件名  " + strOutName + "  在数据库中已存在!" + "/r是否覆盖?", "相同文件名", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information, System.Windows.Forms.MessageBoxDefaultButton.Button1);
                    //覆盖原矢量要素  
                    if (result == System.Windows.Forms.DialogResult.Yes)
                    {
                        IFeatureWorkspace pFWS = (IFeatureWorkspace)pWS2;
                        IDataset pDataset = pFWS.OpenFeatureClass(strOutName) 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 = 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)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }
 

最后成功导入:



问题咨询:152702136(QQ群)

技术合作:1044824695




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值