• sde数据操作


    1、sde连接

    private bool connectSde(string sdeInfo)
            {
                bool flag = false;
                try
                {
                    IWorkspaceFactory worksapceFactory = new SdeWorkspaceFactoryClass();
                    IPropertySet propertySet = new PropertySet();
                    if (sdeInfo.Contains(";"))
                    {
                        propertySet.SetProperty("Server", sdeInfo.Split(';')[0]);
                        propertySet.SetProperty("Instance", sdeInfo.Split(';')[1]);
                        propertySet.SetProperty("User", sdeInfo.Split(';')[2]);
                        propertySet.SetProperty("Password", sdeInfo.Split(';')[3]);
                        propertySet.SetProperty("Version", "SDE.DEFAULT");
                    }
                    workspace = worksapceFactory.Open(propertySet, 0);
                    if (workspace != null)
                    {
                        flag = true;
                    }
                    else
                    {
                        flag = false;
                    }
                }
                catch (Exception ex)
                {
                    flag = false;
                }
                return flag;
            }

    2、打开sde中的数据集

     1 private IFeatureDataset getFeatureDataSet(IWorkspace g_workspace, string layerName)
     2         {
     3             IFeatureDataset m_FeatureDataset = null;
     4             IFeatureWorkspace pWS1 = g_workspace as IFeatureWorkspace;
     5 
     6             if (pWS1 == null)
     7             {
     8                 return m_FeatureDataset;
     9             }
    10 
    11             if (pWS1 != null)
    12             {
    13                 try
    14                 {
    15                     m_FeatureDataset = pWS1.OpenFeatureDataset(layerName);         //打开要素类
    16                 }
    17                 catch (Exception e)
    18                 {
    19                     return null;
    20                 }
    21             }
    22             return m_FeatureDataset;
    23         }

    3、打开sde中的图层

    private IFeatureClass getFeatureClass(IWorkspace g_workspace, string layerName)
            {
                IFeatureClass m_FeatureClass = null;
                IFeatureWorkspace pWS1 = g_workspace as IFeatureWorkspace;
    
                if (pWS1 == null)
                {
                    return m_FeatureClass;
                }
    
                if (pWS1 != null)
                {
                    try
                    {
                        m_FeatureClass = pWS1.OpenFeatureClass(layerName);         //打开要素类
                    }
                    catch (Exception e)
                    {
                        return null;
                    }
                }
                return m_FeatureClass;
            }

    4、sde上删除图层

     public bool DeleteFromSde(string layerName,IList<string> layerNameList)
            {
                bool flag = true;
                try
                {
    
                    IFeatureDataset pFeatureDataset = getFeatureDataSet(workspace, layerName);
                    if (pFeatureDataset != null)
                    {
                        IFeatureClassContainer m_FeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
                        IEnumFeatureClass m_EnumFC = m_FeatureClassContainer.Classes;
                        IFeatureClass m_FeatureClass = m_EnumFC.Next();
    
                        while (m_FeatureClass != null )
                        {
                            if (layerNameList.Contains(m_FeatureClass.AliasName.ToUpper()))
                            {
                                IQueryFilter QueryFilter = new QueryFilterClass();
    
                                if (m_FeatureClass.FeatureCount(QueryFilter) > 0)
                                {
    
                                    //判断是否支持
    
                                    //(1)判断是否支持SQL语句
    
                                    IWorkspaceProperties pWspProperties = workspace as IWorkspaceProperties;
    
                                    IWorkspaceProperty pWspProperty = pWspProperties.get_Property(esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
    
                                        (int)esriWorkspacePropertyType.esriWorkspacePropCanExecuteSQL);
    
                                    if (!pWspProperty.IsSupported)
                                    {
                                        flag = false;
                                    }
    
                                    //删除数据
    
                                    IDataset pDataset = pFeatureDataset as IDataset;
    
                                    pDataset.Workspace.ExecuteSQL("delete  from " + m_FeatureClass.AliasName + " where " + m_FeatureClass.OIDFieldName+"  > 0" );
    
                                }
                            }
    
                            m_FeatureClass = m_EnumFC.Next();
    
                        }
                    }
                }
                catch (Exception ex)
                {
                    flag = false;
                }
                return flag;
            }

    5、向sde数据集中追加对象集

    private bool AddToSde(IFeatureClass insertFeatureClass, string sdefeaName,out string message)
            {
                Geoprocessor gp = new Geoprocessor();
                bool flag = false;
                message = "";
                try
                {
                    IDataset insertDs = insertFeatureClass as IDataset;
                    IFeatureClass pFeatureClass = getFeatureClass(workspace, sdefeaName);
                    IDataset sdeDs = pFeatureClass as IDataset;
    
    
                    ESRI.ArcGIS.DataManagementTools.Append appendTool = new Append();
                    appendTool.inputs = insertDs;
                    appendTool.target = sdeDs;
    
                    gp.Execute(appendTool, null);
    
                    flag = true;
                }
                catch (Exception ex)
                {
                    message = ex.ToString();
                    flag = false;
                }
                finally
                {
                    
                    for (int count = 0; count < gp.MessageCount; count++)
                    {
    
                        message += gp.GetMessage(count).ToString();
                    }
                }
                return flag;
            }

    6、遍历sde数据集并将之加到treeview中

    private void LoadSdeData()
            {
                Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
                IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
    
                //通过IPropertySet设置通过SDE连接数据库的各种参数
                IPropertySet propertySet = new PropertySetClass();
                propertySet.SetProperty("SERVER", sdeInfo.ServerIp);
                propertySet.SetProperty("INSTANCE", sdeInfo.Port);
                propertySet.SetProperty("USER", sdeInfo.UserName);
                propertySet.SetProperty("PASSWORD", sdeInfo.UserPss);
                propertySet.SetProperty("VERSION", "sde.DEFAULT");
    
                //通过以上设置的参数将数据库的数据通过SDE读入工作空间
                IWorkspace workspace = workspaceFactory.Open(propertySet, 0);
    
                IEnumDataset enumDataSet = workspace.get_Datasets(esriDatasetType.esriDTAny);
                enumDataSet.Reset();
    
               //再把Enum数据集中的数据一个个读到DataSet中
                IDataset dataSet;
                dataSet = enumDataSet.Next();
    
               //判断数据集是否有数据
                while(dataSet!=null)
                {
                   //判断数据集中的数据是什么类型
                    if(dataSet is IFeatureDataset)
                    {
                        TreeNode dsNode = new TreeNode();
    
                        //如果是FeatureDataSet做以下处理
                        IFeatureWorkspace  featureWorkspace = workspace as IFeatureWorkspace;
                        IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset(dataSet.Name);
                       
                        IFeatureClassContainer m_FeatureClassContainer = (IFeatureClassContainer)featureDataset;
                        IEnumFeatureClass m_EnumFC = m_FeatureClassContainer.Classes;
                        IFeatureClass m_FeatureClass = m_EnumFC.Next();
                        if (m_FeatureClass != null)
                        {
                            dsNode.Text = dataSet.Name;
                            dsNode.Tag = featureDataset;
                            while (m_FeatureClass != null)
                            {
                                IFeatureLayer m_FeatureLayer = new FeatureLayerClass();
                                m_FeatureLayer.FeatureClass = m_FeatureClass;
                                m_FeatureLayer.Name = m_FeatureClass.AliasName;
    
                                TreeNode layerNode = new TreeNode(m_FeatureLayer.FeatureClass.AliasName);
                                layerNode.Tag = m_FeatureLayer;
                                dsNode.Nodes.Add(layerNode);
    
                                m_FeatureClass = m_EnumFC.Next();
    
                            }
                            treeView1.Nodes.Add(dsNode);
                        }
                        
                    }
                    else if(dataSet is IFeatureClass)
                    {
                        //如果是FeatureClass做以下处理
                        IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
                        IFeatureClass feature = featureWorkspace.OpenFeatureClass(dataSet.Name);
                        if (feature != null)
                        {
                            IFeatureLayer layer = new FeatureLayerClass();
                            layer.FeatureClass = feature;
                            layer.Name = feature.AliasName;
    
                            TreeNode layerNode = new TreeNode(feature.AliasName);
                            layerNode.Tag = layer;
                            treeView1.Nodes.Add(layerNode);
                        }
                    }
                    dataSet = enumDataSet.Next();
                }
            
            }
  • 相关阅读:
    上机课前准备
    C# 跨线程访问控件的解决方法
    C# 异步和多线程的区别
    C# BeginInvoke和EndInvoke方法
    C# 委托的回调机制
    C# 什么是委托
    C# WebBrowser的控件使用
    C# 解决WebBrowser.DocumentCompleted事件的多次调用
    平台调用数据类型
    C# 创建快捷方式
  • 原文地址:https://www.cnblogs.com/nygfcn1234/p/4259705.html
Copyright © 2020-2023  润新知