arcgis engine中图层与数据表之间的join操作

在进行join之前,请确认数据库可以连接 

         try
            {
                //使用oledb连接数据库,连接到sys.基本信息表
                IWorkspaceFactory pWorkspaceFactory = new OLEDBWorkspaceFactory();
                IPropertySet pPropSet = new PropertySet();
                pPropSet.SetProperty("CONNECTSTRING","Provider=sqloledb;Data Source=" + this.instanceBox.Text + ";Initial Catalog=sys;User Id=sa;Password=sa;");
                IWorkspace pWorkspace = pWorkspaceFactory.Open(pPropSet,0);
                IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
                ITable pForeignTable = pFeatureWorkspace.OpenTable("sys.基本信息表");

                //打开已经修复好数据源的temp.mxd
                IMapDocument pMapDocument = new MapDocumentClass();
                pMapDocument.Open(startPath + @"/temp.mxd",null);
                IMap pMap = pMapDocument.get_Map(0);

                //获取图层
                ILayer pLayer = null;
                for (int i = 0; i < pMap.LayerCount; i++)
                {
                    if (pMap.get_Layer(i).Name == "点位")
                    {
                        pLayer = pMap.get_Layer(i);
                    }
                }
                if (pLayer == null)
                {
                    MessageBox.Show("打开地图文件(.mxd)失败");
                    return;
                }

                //join
                IFeatureLayer pFLayer = (IFeatureLayer)pLayer;
                IFeatureClass pFClass2 = pFLayer.FeatureClass;
                IMemoryRelationshipClassFactory pMemRelClassFactory = new MemoryRelationshipClassFactoryClass();
                IRelationshipClass pRelaClass = pMemRelClassFactory.Open("TableJoin1",pFClass2,"点位编号",(IObjectClass)pForeignTable,"点位编号","forward","backward",esriRelCardinality.esriRelCardinalityOneToOne);
                IDisplayRelationshipClass pDisplayRelationshipC = (IDisplayRelationshipClass)pFLayer;
                pDisplayRelationshipC.DisplayRelationshipClass(pRelaClass,esriJoinType.esriLeftOuterJoin);
                pMapDocument.Save(false,true);
                pMapDocument.Close();

            }
            catch (System.Exception ex4)
            {
                MessageBox.Show(ex4.Message);
                return;
            }

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值