在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#数据库操作 → C#语言在winform下链接postgresql数据库

C#语言在winform下链接postgresql数据库

C#数据库操作

下载此实例
  • 开发语言:C#
  • 实例大小:3.30M
  • 下载次数:59
  • 浏览次数:799
  • 发布时间:2019-12-04
  • 实例类别:C#数据库操作
  • 发 布 人:thewin
  • 文件格式:.zip
  • 所需积分:2

实例介绍

【实例简介】C#语言在winform下链接postgresql数据库,本实例需要安装ESRI.ArcGIS 后运行

【实例截图】

from clipboard

【核心代码】


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;
using Mono;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.ArcMapUI;
using OSGeo.OGR;

namespace ConectPGsql
{
    public partial class Form1 : Form
    {
        //postgis数据库连接参数
        string STR = "Server=localhost;Port=5432;UserId=postgres;Password=123456;Database=omtgis";

        public Form1()
        {
            InitializeComponent();

            GetData();//得到postgis里的shp数据并生成图层
        
            Initlayertree();//图层控制树

        
        }

        private void GetData()
        {
          NpgsqlConnection conn = new NpgsqlConnection(STR);
          conn.Open();

          //得到基础设施类型
          DataSet ds0 = new DataSet();
          NpgsqlDataAdapter objAdapter0 = new NpgsqlDataAdapter("SELECT * FROM slx", conn);
          objAdapter0.Fill(ds0, "ds0");
          DataTable DT0 = ds0.Tables[0];

        //得到shp图层的全部属性数据
          //for (int p = 0; p < DT0.Rows.Count; p  )
          //{
              DataSet ds = new DataSet();
              string sql1 = "SELECT * FROM xzs";
              //string sql1 = "SELECT * FROM "   DT0.Rows[p]["名称"].ToString();
              
              NpgsqlDataAdapter objAdapter = new NpgsqlDataAdapter(sql1, conn);
              objAdapter.Fill(ds, "a");
              DataTable DT = ds.Tables[0];

              //得到shp图层的字段信息
              IFieldsEdit curFileds = new FieldsClass();
              IFieldEdit curField = new FieldClass();
              for (int w = 0; w < DT.Columns.Count; w  )
              {
                  curField = new FieldClass();
                  curField.Name_2 = DT.Columns[w].ColumnName;
                  curField.Type_2 = esriFieldType.esriFieldTypeString;
                  curFileds.AddField(curField);
              }

              //得到shp图层的要素并图层化
              string sql2 = "SELECT  st_asbinary(geom) FROM xzs";
              //string sql2 = "SELECT st_asbinary(geom) FROM "   DT0.Rows[p]["名称"].ToString();
              NpgsqlCommand objCommand = new NpgsqlCommand(sql2, conn);
              NpgsqlDataReader dr = objCommand.ExecuteReader();
              int m = 0;
              while (dr.Read())
              {
                  
                  IGeometry geom = null;
                  int countin;
                
                  object byteArrayObject = dr.GetValue(0);
                
                  if (byteArrayObject== null)
                  { return; }


                  IGeometryFactory2 factory = new GeometryEnvironment() as IGeometryFactory2;
                  factory.CreateGeometryFromWkbVariant(byteArrayObject, out geom, out countin);
                 
         
                  if (geom != null)
                  {
                      //生成图层
                      IFeatureLayer pFeatureLayer = CreateFeatureLayerInmemeory(DT.Rows[m]["名称"].ToString(), DT.Rows[m]["名称"].ToString(), null, geom.GeometryType, curFileds as IFields);
                      
                      IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                      IFeature pFeature = pFeatureClass.CreateFeature();
                      pFeature.Shape = geom;
                    
                      pFeature.Store();
                  
                      axMapControl1.AddLayer(pFeatureLayer);
                  }
                      m  ;
                  
              }
          //}
        }

        private static IFeatureLayer CreateFeatureLayerInmemeory(string DataSetName, string AliaseName, ISpatialReference SpatialRef, esriGeometryType GeometryType, IFields PropertyFields)
        {
            IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
            ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0);
            ESRI.ArcGIS.esriSystem.IName name = (IName)workspaceName;
            ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)name.Open();

            IField oField = new FieldClass();
            IFields oFields = new FieldsClass();
            IFieldsEdit oFieldsEdit = null;
            IFieldEdit oFieldEdit = null;
            IFeatureClass oFeatureClass = null;
            IFeatureLayer oFeatureLayer = null;

            try
            {
                oFieldsEdit = oFields as IFieldsEdit;
                oFieldEdit = oField as IFieldEdit;

                for (int i = 0; i < PropertyFields.FieldCount; i  )
                {
                    oFieldsEdit.AddField(PropertyFields.get_Field(i));
                }

                IGeometryDef geometryDef = new GeometryDefClass();
                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
                geometryDefEdit.AvgNumPoints_2 = 1;
                geometryDefEdit.GeometryType_2 = GeometryType;
                geometryDefEdit.GridCount_2 = 1;
                geometryDefEdit.HasM_2 = false;
                geometryDefEdit.HasZ_2 = false;
                geometryDefEdit.SpatialReference_2 = SpatialRef;
                geometryDefEdit.SpatialReference_2 = new UnknownCoordinateSystemClass();//没有这一句就报错,说尝试读取或写入受保护的内存。
                geometryDefEdit.SpatialReference.SetDomain(-200, 200, -200, 200);//没有这句就抛异常来自HRESULT:0x8004120E。


                oFieldEdit.Name_2 = "SHAPE";
                oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                oFieldEdit.GeometryDef_2 = geometryDef;
                oFieldEdit.IsNullable_2 = true;
                oFieldEdit.Required_2 = true;
                oFieldsEdit.AddField(oField);

                oFeatureClass = (inmemWor as IFeatureWorkspace).CreateFeatureClass(DataSetName, oFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
                (oFeatureClass as IDataset).BrowseName = DataSetName;

                oFeatureLayer = new FeatureLayerClass();
                oFeatureLayer.Name = AliaseName;
                oFeatureLayer.FeatureClass = oFeatureClass;

            }
            catch
            {
            }
            return oFeatureLayer;
        }


        private void Initlayertree()
        {
            TreeNode node1 = new TreeNode("图层");

            for (int k = 0; k < axMapControl1.LayerCount; k  )
            {
                TreeNode node2 = new TreeNode(axMapControl1.get_Layer(k).Name);
                node1.Nodes.Add(node2);
            }
                this.treeView1.Nodes.Add(node1);
        }

        private void GetD()
        {
            IGeometry geom = null;
            int countin;

        NpgsqlConnection dbcon = new NpgsqlConnection(STR);
        dbcon.Open();
        DataSet ds = new DataSet();
        NpgsqlDataAdapter objAdapter = new NpgsqlDataAdapter("SELECT  st_asbinary(geom) FROM sfz", dbcon);
        objAdapter.Fill(ds, "a");//a这个表是自定义的

    

        IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
        factory.CreateGeometryFromWkbVariant(ds.Tables[0].Rows[0], out geom, out countin);

            ILayer fl = geom as ILayer;
            axMapControl1.AddLayer(fl);
        //dataGridView1.DataSource = ds.Tables[0];
        
      //  AsBinary();
        }


        /// <summary>
        /// Load a PostGis layer in the test MapControl
        /// </summary>
        private void LoadPostGisLayer()
        {
            // Open workspace and feature class.
           // IWorkspaceFactory wksf = new PostGisWorkspaceFactory();

            //Open from zig file
           // IFeatureWorkspace fwks = (IFeatureWorkspace)wksf.OpenFromFile(@"C:\ziggis\ZigGis\example2.zig", 0);

          
            //Open from PropertySet
            //IPropertySet ps = new PropertySetClass();
            //ps.SetProperty("server", "localhost");
            //ps.SetProperty("database", "TUTORIAL");
            //ps.SetProperty("user", "psqluser");
            //ps.SetProperty("password", "psqluser");
            //ps.SetProperty("port", "5432");
            //ps.SetProperty("configfile", @"C:\ziggis\ZigGis\logging.config");
            //IFeatureWorkspace fwks = (IFeatureWorkspace)wksf.Open(ps, 0);
          

            //IFeatureClass fc = fwks.OpenFeatureClass("paolo.canada");
            //// Create the new layer (default renderer is ISimpleRenderer)
            //IFeatureLayer layer = new PostGisFeatureLayer();
            //layer.FeatureClass = fc;
            //layer.Name = fc.AliasName;
            //ILayer ly = layer as ILayer;
            //IGeoFeatureLayer gfl = layer as IGeoFeatureLayer;
            ////doSimpleRenderer(gfl);
            //doUniqueValueRenderer(gfl);
            ////IFeatureRenderer fr = new VerySimpleCustomRenderer();
            ////gfl.Renderer = fr;
            //axMapControl1.AddLayer(gfl as ILayer, 0);
            ////SelectFeaturesFromFeatureClass(fc, fwks as IWorkspace);
            ////SelectFeaturesFromFeatureLayer(layer);
        }

        /// <summary>
        /// Load a Shapefile layer in the test MapControl
        /// </summary>
        private void LoadShapefile()
        {
            IWorkspaceFactory wf = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace fw = (IFeatureWorkspace)wf.OpenFromFile(@"C:\data", 0);
            IFeatureClass fc = fw.OpenFeatureClass("canada");
            IFeatureLayer layer = new FeatureLayerClass();
            layer.FeatureClass = fc;
            layer.Name = fc.AliasName;
            //SelectFeaturesFromFeatureLayer(layer);
            //SelectFeaturesFromFeatureClass(fc, fw as IWorkspace);
            axMapControl1.AddLayer(layer as ILayer, 0);
            IGeoFeatureLayer gfl = layer as IGeoFeatureLayer;
            doUniqueValueRenderer(gfl);
        }

        private void SelectFeaturesFromFeatureLayer(IFeatureLayer fl)
        {
            IFeatureSelection fs = fl as IFeatureSelection;
            IQueryFilter qf = new QueryFilterClass();
            qf.WhereClause = "";
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            fs.SelectFeatures(qf, esriSelectionResultEnum.esriSelectionResultNew, false);
            PrintSelectionSet(fs.SelectionSet);
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
        }

        private void SelectFeaturesFromFeatureClass(IFeatureClass fc, IWorkspace ws)
        {
            IQueryFilter qf = new QueryFilterClass();
            qf.WhereClause = "";
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            ISelectionSet ss = fc.Select(qf, esriSelectionType.esriSelectionTypeIDSet, esriSelectionOption.esriSelectionOptionNormal, ws);
            PrintSelectionSet(ss);
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
        }

        private void PrintSelectionSet(ISelectionSet ss)
        {
            IEnumIDs enumIDs = ss.IDs as IEnumIDs;
            try
            {
                int oid = enumIDs.Next();
                while (oid != -1)
                {
                    System.Diagnostics.Debug.WriteLine("OID:"   oid);
                    oid = enumIDs.Next();
                }
            }
            catch
            {
                System.Diagnostics.Debug.WriteLine("End of enum!");
            }
        }

        private void doUniqueValueRenderer(IGeoFeatureLayer gfl)
        {
            //TesterUtilities.ApplyUniqueValueRenderer(gfl);
        }

        private void doSimpleRenderer(IGeoFeatureLayer gfl)
        {
            //TesterUtilities.ApplySimpleRenderer(gfl);
        }

        private void ShowTableWindow(ILayer layer)
        {
            ITableWindow2 tw = new TableWindowClass();
            tw.FindViaLayer(layer);
            tw.Layer = layer;
        }

        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                SetNodeChecked(e.Node, e.Node.Checked);

                //刷新图层
                axMapControl1.ActiveView.Refresh();
                axMapControl1.ActiveView.ScreenDisplay.UpdateWindow();
            }
        }
        private void SetNodeChecked(TreeNode tn, bool Checked)
        {
            if (tn == null) return;

            // 设置子节点状态
            foreach (TreeNode tnChild in tn.Nodes)
            {
                tnChild.Checked = Checked;

                //递归设置字节点状态与父节点状态一致
                SetNodeChecked(tnChild, Checked);
            }

            // 设置父节点状态
            TreeNode tnParent = tn;
            int nNodeCount = 0;

            //循环设置父节点状态
            while (tnParent.Parent != null)
            {
                tnParent = (TreeNode)(tnParent.Parent);
                nNodeCount = 0;
                bool isChecked = false;//记录父节点中是否有选中的子节点
                foreach (TreeNode tnTemp in tnParent.Nodes)
                {
                    for (int k = 0; k < axMapControl1.LayerCount; k  )
                    {
                        if (axMapControl1.get_Layer(k).Name == tnTemp.Text)
                        {
                            axMapControl1.get_Layer(k).Visible = tnTemp.Checked;
                        }
                    }

                    if (tnTemp.Checked)
                    {
                        nNodeCount  ;
                        isChecked = true;
                    }
                }
                if (nNodeCount > 0 && isChecked)
                {
                    tnParent.Checked = true;//若有则选中父节点
                }
                else
                {
                    tnParent.Checked = Checked;
                }
            }

        }
    }
} 


实例下载地址

C#语言在winform下链接postgresql数据库

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 lf8018 发表于: 2021-10-21 17:02 12
缺少 ESRI 的引用,导致一堆错误,不推荐下载。无法编译!

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警