Example #1
0
        public static void DeleteFeatureClass(IFeatureClass pFeatureClass, string condtion, string FeatureClassName, out Exception Error)
        {
            Error = null;
            if (pFeatureClass == null)
            {
                return;
            }
            IDataset   dataset   = pFeatureClass as IDataset;
            IWorkspace workspace = dataset.Workspace;

            try
            {
                if (condtion != "")
                {
                    workspace.ExecuteSQL("delete from " + FeatureClassName + " where " + condtion);
                }
                else
                {
                    workspace.ExecuteSQL("delete from " + FeatureClassName);
                }
            }
            catch (Exception ex)
            {
                Error = ex;
            }
        }
Example #2
0
 /// <summary>
 /// 执行update / insert sql语句,不抛出异常
 /// </summary>
 /// <param name="sql">数据库语句</param>
 /// <returns>是否成功执行</returns>
 public static bool ExecuteSql(string sql)
 {
     try
     {
         _pWorkspace.ExecuteSQL(sql);
         return(true);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         return(false);
     }
 }
Example #3
0
        /// <summary>
        /// 删除所有符合查询条件的要素(执行sql,此方法执行速度较ITable.DeleteSearchedRows更快)
        /// </summary>
        /// <param name="workspace"></param>
        /// <param name="featureClassName"></param>
        /// <param name="whereClause"></param>
        public static void DeleteFeatures(this IWorkspace workspace, string featureClassName, string whereClause)
        {
            whereClause = string.IsNullOrEmpty(whereClause) ? "1=1" : whereClause;
            string sql = $"delete from {featureClassName} where {whereClause}";

            workspace.ExecuteSQL(sql);
        }
Example #4
0
        private void InitSystemByXML(IWorkspace sourceWorkspace, IWorkspace targetWorkspace)
        {
            string      xmlpath = Application.StartupPath + "\\..\\Template\\InitSystemConfig.Xml";
            XmlDocument doc     = new XmlDocument();

            doc.Load(xmlpath);
            string      strSearch       = "//InitSystemRoot";
            XmlNode     pInitSystemnode = doc.SelectSingleNode(strSearch);
            XmlNodeList pInitSystemlist = pInitSystemnode.ChildNodes;

            foreach (XmlNode pnode in pInitSystemlist)
            {
                if (pnode.NodeType == XmlNodeType.Element)
                {
                    XmlElement pEle         = pnode as XmlElement;
                    string     strTableName = pEle.GetAttribute("Name");
                    try
                    {
                        targetWorkspace.ExecuteSQL("drop table " + strTableName);
                    }
                    catch (Exception e)
                    {
                    }
                    CopyPasteGDBData.CopyPasteGeodatabaseData(sourceWorkspace, targetWorkspace, strTableName, esriDatasetType.esriDTTable);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Deletes the anno features in feature layer.
        /// </summary>
        /// <param name="featureLayer">The feature layer.</param>
        public static void DeleteAnnoFeaturesInFeatureLayer(IFeatureLayer featureLayer)
        {
            if (featureLayer == null)
            {
                return;
            }
            IFeatureClass  featureClass   = featureLayer.FeatureClass;
            IDataset       dataset        = featureClass as IDataset;
            IWorkspace     pWorkspace     = dataset.Workspace;
            IWorkspaceEdit pWorkspaceEdit = pWorkspace as IWorkspaceEdit;

            pWorkspaceEdit.StartEditing(true);
            pWorkspaceEdit.StartEditOperation();

            IWorkspaceProperties2 workspaceProperties2 = (IWorkspaceProperties2)pWorkspace;
            //判断workspace是否可以执行SQL语句
            IWorkspaceProperty canExecuteSqlProperty =
                workspaceProperties2.get_Property(esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
                                                  (int)esriWorkspacePropertyType.esriWorkspacePropCanExecuteSQL);

            if (canExecuteSqlProperty.IsSupported)
            {
                //ExecuteSQL删除feature
                pWorkspace.ExecuteSQL("delete  from " + featureClass.AliasName + " where objectid >=0");
            }
            pWorkspaceEdit.StopEditOperation();
            pWorkspaceEdit.StopEditing(true);
        }
Example #6
0
        /// <summary>
        ///  写入数据库版本表    guozheng added
        /// </summary>
        /// <param name="in_iVersion">要写入的版本号</param>
        /// <param name="in_DateTime">版本建立时间</param>
        /// <param name="ex"></param>
        private static void WriteDBVersion(IWorkspace pSDEWS, int in_iVersion, DateTime in_DateTime, out Exception ex)
        {
            ex = null;
            if (null == pSDEWS)
            {
                ex = new Exception("更新环境库连接信息未初始化。"); return;
            }
            if (null == in_DateTime)
            {
                ex = new Exception("输入时间不能为空"); return;
            }
            string sql = "INSERT INTO " + ModData.m_sDBVersionTable + "(VERSION,USERNAME,VERSIONTIME,DES) values(";

            sql += in_iVersion.ToString() + "," + "null," + "to_date('" + in_DateTime.ToString("G") + "','yyyy-mm-dd hh24:mi:ss')" + ",null)";
            try
            {
                pSDEWS.ExecuteSQL(sql);
            }
            catch (Exception eError)
            {
                //*******************************************************************
                //Exception Log
                if (ModData.SysLog == null)
                {
                    ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                }
                ModData.SysLog.Write(eError, null, DateTime.Now);
                //********************************************************************
                ex = new Exception("写入数据库版本表失败。\n原因:" + eError.Message);
                return;
            }
        }
Example #7
0
 private void DropTable(string TableName, IWorkspace pW)
 {
     try
     {
         pW.ExecuteSQL("Drop table " + TableName);
     }
     catch
     { }
 }
Example #8
0
 private void DropTable(IWorkspace pWks, string TableName)
 {
     try
     {
         pWks.ExecuteSQL("drop table " + TableName);
     }
     catch
     { }
 }
Example #9
0
        private bool AddRow(string tableName, string layerID, string layername, string statisticfield, string solutionName, string classfiyfield, string statisticunit)
        {
            bool falg = false;

            if (m_pWorkspace == null)
            {
                return(falg);
            }
            string SQLstring = "insert into " + tableName + " (LAYERID,LAYERNAME,STATISTICSFIELD,STATISTICSNAME,CLASSIFYFIELD,STATISTICSUNIT) values('" + layerID + "','" + layername + "', '" + statisticfield + "' , '" + solutionName + "','" + classfiyfield + "','" + statisticunit + "')";

            try
            {
                m_pWorkspace.ExecuteSQL(SQLstring);
                falg = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return(falg);
            }
            return(falg);
        }
Example #10
0
        private ITable GetSolutionTable()
        {
            IWorkspace pWorkspace = Plugin.ModuleCommon.TmpWorkSpace;
            ITable     pTable     = null;

            DropTable(pWorkspace, "TempStatisticsTable");
            //统计数据SQL语句
            string SQLString = "create table TempStatisticsTable as select * from customstatistics";

            pWorkspace.ExecuteSQL(SQLString);
            pTable = (pWorkspace as IFeatureWorkspace).OpenTable("TempStatisticsTable");
            return(pTable);
        }
Example #11
0
        private void InitSqlSolution()
        {
            cmboxSqlSolution.Items.Clear();
            IFeatureWorkspace pFeawks = m_Workspace as IFeatureWorkspace;

            DropTable("TempTable0", m_Workspace);

            try
            {
                m_Workspace.ExecuteSQL("create table TempTable0 as select Layerid,id,longinuser,solutionname,description,condition from  SQLSOLUTION  where (longinuser='******' or isshare=1) and layerid='" + LayerID + "'");
                if (_DicSolution == null)
                {
                    _DicSolution = new Dictionary <string, string>();
                }
                if (_DicDescription == null)
                {
                    _DicDescription = new Dictionary <string, string>();
                }
                ITable  pTable           = pFeawks.OpenTable("TempTable0");
                int     indexField       = pTable.Fields.FindField("solutionname");
                int     indexCondition   = pTable.Fields.FindField("condition");
                int     indexDescription = pTable.Fields.FindField("description");
                ICursor pCursor          = pTable.Search(null, false);
                IRow    pRow             = pCursor.NextRow();
                while (pRow != null)
                {
                    if (pRow.get_Value(indexField) != null)
                    {
                        string strName = pRow.get_Value(indexField).ToString();
                        cmboxSqlSolution.Items.Add(strName);
                        string strCondition   = pRow.get_Value(indexCondition).ToString();
                        string strDescription = pRow.get_Value(indexDescription).ToString();
                        if (!_DicSolution.ContainsKey(strName))
                        {
                            _DicSolution.Add(strName, strCondition);
                        }
                        if (!_DicDescription.ContainsKey(strName))
                        {
                            _DicDescription.Add(strName, strDescription);
                        }
                    }
                    pRow = pCursor.NextRow();
                }
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pCursor);
                pCursor = null;
                DropTable("TempTable0", m_Workspace);
            }
            catch
            { }
            cmboxSqlSolution.Text = "选择查询方案";
        }
Example #12
0
        private void okbuttonX_Click(object sender, EventArgs e)
        {
            if (sqlrichTextBox.Text == "")
            {
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }
            else
            {
                if (!m_blnOk)
                {
                    IWorkspace pWorkspace = null;
                    string     strFcname  = "";
                    //added by chulili 20111212 改变判断方法(判断查询条件语法是否正确)
                    if (m_FeatureClass != null)
                    {
                        IDataset pDataset = m_FeatureClass as IDataset;
                        if (pDataset != null)
                        {
                            pWorkspace = pDataset.Workspace;
                            strFcname  = pDataset.Name;
                        }
                    }
                    try
                    {
                        if (pWorkspace != null)
                        {
                            pWorkspace.ExecuteSQL("select count(*) from " + strFcname + " where " + sqlrichTextBox.Text);  //deleted by chulili 20111220删除where中的1=0,因为它会让判断不准确
                        }
                        pWorkspace        = null;
                        m_blnOk           = true;
                        this.DialogResult = DialogResult.OK;
                    }
                    catch
                    {
                        MessageBox.Show("SQL语句不符规则,请重新输入.");
                        pWorkspace = null;
                        return;
                    }
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }


                this.Close();
            }
        }
Example #13
0
        /// <summary>
        /// 写入远程更新日志    guozheng added
        /// </summary>
        /// <param name="in_iOID">更新要素OID</param>
        /// <param name="in_sLayerName">更新要素所在图层名</param>
        /// <param name="in_iVersion">版本</param>
        /// <param name="in_DateTime">更新时间</param>
        /// <param name="in_iState">更新状态:1、新增,2、修改,3、删除</param>
        /// <param name="in_Envelope">更新要素的最小外包矩形</param>
        /// <param name="ex"></param>
        private static void WriteLog(IWorkspace pSDEWS, int in_iOID, string in_sLayerName, int in_iVersion, DateTime in_DateTime, int in_iState, IEnvelope in_Envelope, out Exception ex)
        {
            ex = null;
            //////去掉sde图层带的用户名
            if (in_sLayerName.Contains("."))
            {
                in_sLayerName = in_sLayerName.Substring(in_sLayerName.LastIndexOf('.') + 1);
            }
            if (pSDEWS == null)
            {
                ex = new Exception("更新环境库连接信息未初始化"); return;
            }
            ;
            string sql = "INSERT INTO " + ModData.m_sUpDataLOGTable + "(OID,STATE,LAYERNAME,LASTUPDATE,VERSION,XMIN,XMAX,YMIN,YMAX) values(";

            sql += in_iOID.ToString() + "," + in_iState.ToString() + ",'" + in_sLayerName + "'," + "to_date('" + in_DateTime.ToString("G") + "','yyyy-mm-dd hh24:mi:ss')" + "," + in_iVersion.ToString() + ",";
            if (in_Envelope != null)
            {
                sql += in_Envelope.XMin.ToString() + "," + in_Envelope.XMax.ToString() + "," + in_Envelope.YMin.ToString() + "," + in_Envelope.YMax.ToString() + ")";
            }
            else
            {
                sql += "NULL,NULL,NULL,NULL)";
            }
            try
            {
                pSDEWS.ExecuteSQL(sql);
            }
            catch (Exception eError)
            {
                //*******************************************************************
                //Exception Log
                if (ModData.SysLog == null)
                {
                    ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                }
                ModData.SysLog.Write(eError, null, DateTime.Now);
                //********************************************************************
                ex = new Exception("写入日志表失败。\n原因:" + eError.Message);
                return;
            }
        }
Example #14
0
        private void verifybuttonX_Click(object sender, EventArgs e)
        {
            IFeatureClass pFeatureClass = null;
            IWorkspace    pWorkspace    = null;
            string        strFcname     = "";

            //added by chulili 20111212 改变判断方法(判断查询条件语法是否正确)

            if (m_FeatureClass != null)
            {
                pFeatureClass = m_FeatureClass;
                IDataset pDataset = pFeatureClass as IDataset;
                if (pDataset != null)
                {
                    pWorkspace = pDataset.Workspace;
                    strFcname  = pDataset.Name;
                }
            }
            //IQueryFilter pQueryFilter;
            //pQueryFilter = new QueryFilterClass();
            //pQueryFilter.WhereClause = sqlrichTextBox.Text + "and " + sqlrichTextBox.Text;
            try
            {
                if (pWorkspace != null)
                {
                    pWorkspace.ExecuteSQL("select count(*) from " + strFcname + " where " + sqlrichTextBox.Text); //deleted by chulili 20111220删除where中的1=0,因为它会让判断不准确
                }
                //IFeatureCursor pFeatureCursor = pFeatureLayer.Search(pQueryFilter, false);
                //System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
                //pFeatureCursor = null;
                MessageBox.Show("验证通过");
                m_blnOk = true;
            }
            catch (Exception err)
            {
                MessageBox.Show("SQL语句不符规则,请重新输入.");
                pWorkspace = null;
            }
        }
Example #15
0
        public static void ClearFeaturesInFeatureLayer(IFeatureLayer featureLayer)
        {
            if (featureLayer == null)
            {
                return;
            }
            IFeatureClass         featureClass         = featureLayer.FeatureClass;
            IDataset              dataset              = featureClass as IDataset;
            IWorkspace            pWorkspace           = dataset.Workspace;
            IWorkspaceProperties2 workspaceProperties2 = pWorkspace as IWorkspaceProperties2;
            //判断workspace是否可以执行SQL语句
            IWorkspaceProperty canExecuteSqlProperty =
                workspaceProperties2.Property[
                    esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
                    (int)esriWorkspacePropertyType.esriWorkspacePropCanExecuteSQL];

            if (canExecuteSqlProperty.IsSupported)
            {
                //ExecuteSQL删除feature
                pWorkspace.ExecuteSQL("delete  from " + featureClass.AliasName + " where objectid >=0");
            }
        }
Example #16
0
        private string  UseAOToCreateUpdateFeatures(string sql)
        {
            string retString = "in get UseAOToCreateUpdateFeatures >";

            try
            {
                //get map server
                IMapServer3 mapServer = (IMapServer3)serverObjectHelper.ServerObject;

                IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;

                IFeatureClass fc = dataAccess.GetDataSource(mapServer.DefaultMapName, 0) as IFeatureClass;
                retString += ">Attempting to get wse";
                IWorkspace ws = (fc as IDataset).Workspace;
                //string sql = @"exec dbo.apLITSaveChanges @curGeoLocID = 5, @NewGeoLocId = 2, @address = '222W.Pine', @windowsLogin = '******', @city = 'wern', @zipCode = '12345', @Latitude = 1, @longitude = 2, @facilityname = 'asdf', @appID = 'asdf', @serverName = 'asdf', @status = 'r'";
                ws.ExecuteSQL(sql);
                return("ok");
            }
            catch (Exception ex)
            {
                return("ERROR " + ex.ToString());
            }
        }
Example #17
0
        /// <summary>
        /// 创建默认的更新时使用的一系列表

        /// </summary>
        /// <param name="FIDIsAutoIncrease">标识FID记录表记录中的GOFID字段是否自动增值</param>
        ///<param name="commonTableCreate">标识是否创建除FID记录表以外的其他表</param>
        /// <returns></returns>
        public bool CreateDefaultTables(bool FIDIsAutoIncrease, bool commonTableCreate)
        {
            Exception  eError     = null;
            IWorkspace pWorkspace = this._Workspace;

            try
            {
                if (pWorkspace.Type == esriWorkspaceType.esriLocalDatabaseWorkspace)   //如果是本地文件库
                {
                    if (commonTableCreate)
                    {
                        //创建更新任务表

                        pWorkspace.ExecuteSQL("create table ICE_CASE (CASE_ID varchar(50),U_ID integer,G_ID integer,PRO_ID integer,CREATEDATE date,ENDDATE date,REMARK varchar(255))");

                        //创建任务关联表

                        pWorkspace.ExecuteSQL("create table ICE_CASEJOIN (JOIN_GROUP text,U_ID integer,G_ID integer,PRO_ID integer,CREATEDATE date,ENDDATE date,C_REMARK varchar(255))");

                        //创建跨区要素表

                        pWorkspace.ExecuteSQL("create table ICE_CORSSFEATURE (GOFID integer primary key,CASE_ID varchar(50),PRO_ID integer)");

                        //创建数据源表
                        pWorkspace.ExecuteSQL("create table ICE_DATASOURCE (MAP_ID varchar(50),CASE_NAME varchar(50),PRO_NAME varchar(50),USER_TYPE varchar(100),CREATEDATE date,ENDDATE date,REMARK varchar(200))");

                        //创建工程信息表

                        pWorkspace.ExecuteSQL("create table ICE_PROJECTINFO (PRO_ID AUTOINCREMENT primary key,PRO_NAME varchar(50),MASTER_ID integer,PROINFO Memo,CREATEDATE date,ENDDATE date,P_REMARK varchar(200),STATE integer)");

                        //创建更新地图信息表

                        pWorkspace.ExecuteSQL("create table ICE_UPDATEMAPINFO (MAP_ID varchar(20),CASE_ID varchar(50),PRO_ID integer,STATE varchar(50),U_NAME varchar(50))");

                        //创建用户组信息表
                        pWorkspace.ExecuteSQL("create table ICE_USERGROUPINFO (G_ID AUTOINCREMENT primary key,G_NAME varchar(50),G_TYPE varchar(50),G_PURVIEW OLEObject,G_REMARK varchar(200))");

                        //创建用户组关系表
                        pWorkspace.ExecuteSQL("create table ICE_USERGROUPRELATION (U_ID integer,G_ID integer)");

                        //创建用户信息表

                        pWorkspace.ExecuteSQL("create table ICE_USERINFO (U_ID AUTOINCREMENT primary key,U_NAME varchar(50),U_PWD varchar(50),U_SEX integer,U_JOB varchar(50),U_REMARK varchar(200),LOGININFO Memo)");

                        //创建更新日志表

                        pWorkspace.ExecuteSQL("create table UPDATELOG (GOFID integer,STATE integer,OID integer,EID integer,STATUS integer,SAVE integer,NEW integer,LAYERNAME varchar(50),LASTUPDATE varchar(50),PROJECTID integer,CASEID varchar(50))");

                        //创建DID与FID关系表

                        pWorkspace.ExecuteSQL("create table DID与FID关系表 (DID integer,FID integer)");

                        pWorkspace.ExecuteSQL("create table UPDATERES (PRO_ID integer,FCNAME varchar(50),OID integer)");
                    }

                    if (FIDIsAutoIncrease)
                    {    //创建FID记录表
                        pWorkspace.ExecuteSQL("create table FID记录表 (GOFID AUTOINCREMENT,FCNAME varchar(50),OID integer)");
                    }
                    else
                    {
                        //创建FID记录表

                        pWorkspace.ExecuteSQL("create table FID记录表 (GOFID integer,FCNAME varchar(50),OID integer)");
                    }
                }
                else     //如果是SDE
                {
                    //首先删除已有的表对象
                    //pWorkspace.ExecuteSQL("drop table ICE_CASE");
                    //pWorkspace.ExecuteSQL("drop table ICE_CASEJOIN");
                    //pWorkspace.ExecuteSQL("drop table ICE_CORSSFEATURE");

                    //pWorkspace.ExecuteSQL("drop trigger ICE_PROJECTINFO_TG");
                    //pWorkspace.ExecuteSQL("drop sequence ICE_PROJECTINFO_SEQ");
                    //pWorkspace.ExecuteSQL("drop table ICE_PROJECTINFO");
                    //pWorkspace.ExecuteSQL("drop table ICE_UPDATEMAPINFO");
                    //pWorkspace.ExecuteSQL("drop table ICE_USERGROUPINFO");
                    //pWorkspace.ExecuteSQL("drop table ICE_USERGROUPRELATION");

                    //pWorkspace.ExecuteSQL("drop trigger ICE_USERINFO_TG");
                    //pWorkspace.ExecuteSQL("drop sequence ICE_USERINFO_SEQ");
                    //pWorkspace.ExecuteSQL("drop table ICE_USERINFO");
                    //pWorkspace.ExecuteSQL("drop table UPDATELOG");

                    //pWorkspace.ExecuteSQL("drop trigger FID记录表_TG");
                    //pWorkspace.ExecuteSQL("drop sequence FID记录表_SEQ");
                    //pWorkspace.ExecuteSQL("drop table FID记录表");
                    //pWorkspace.ExecuteSQL("drop table DID与FID关系表");

                    if (commonTableCreate)
                    {
                        //创建更新任务表

                        pWorkspace.ExecuteSQL("create table ICE_CASE(CASE_ID    NVARCHAR2(50),U_ID       INTEGER,G_ID       INTEGER,PRO_ID     INTEGER,CREATEDATE DATE,ENDDATE    DATE,REMARK     NVARCHAR2(255))");

                        //创建任务关联表

                        pWorkspace.ExecuteSQL("create table ICE_CASEJOIN(JOIN_GROUP NVARCHAR2(500),U_ID       INTEGER,G_ID       INTEGER,PRO_ID     INTEGER,CREATEDATE DATE,ENDDATE    DATE,C_REMARK   NVARCHAR2(255))");

                        //创建跨区要素表

                        pWorkspace.ExecuteSQL("create table ICE_CORSSFEATURE(GOFID    INTEGER,CASE_ID  NVARCHAR2(50),PRO_ID   INTEGER)");

                        //创建数据源表
                        pWorkspace.ExecuteSQL("create table ICE_DATASOURCE(MAP_ID     NVARCHAR2(20),CASE_NAME  NVARCHAR2(50),PRO_NAME   NVARCHAR2(50),USER_TYPE  NVARCHAR2(100),CREATEDATE DATE,ENDDATE    DATE,REMARK     NVARCHAR2(200))");

                        //创建工程信息表//需要创建触发器
                        pWorkspace.ExecuteSQL("create table ICE_PROJECTINFO(PRO_ID     INTEGER not null,PRO_NAME   NVARCHAR2(50),MASTER_ID  INTEGER,PROINFO    NVARCHAR2(500),CREATEDATE DATE,ENDDATE    DATE,P_REMARK   NVARCHAR2(200))");
                        pWorkspace.ExecuteSQL("create sequence ICE_PROJECTINFO_SEQ minvalue 1 maxvalue 9999999999 start with 1 increment by 1 cache 30 order");
                        pWorkspace.ExecuteSQL("create or replace trigger ICE_PROJECTINFO_TG before insert on ICE_PROJECTINFO for each row begin if :NEW.PRO_ID=0 or :NEW.PRO_ID is null then SELECT ICE_PROJECTINFO_SEQ.NEXTVAL   INTO   :NEW.PRO_ID   FROM   DUAL; end if; end;");

                        //创建更新地图信息表

                        pWorkspace.ExecuteSQL("create table ICE_UPDATEMAPINFO(MAP_ID   NVARCHAR2(20),CASE_ID  NVARCHAR2(50),PRO_ID   INTEGER,STATE    NVARCHAR2(50),U_NAME   NVARCHAR2(50))");

                        //创建用户组信息表//需要创建触发器
                        pWorkspace.ExecuteSQL("create table ICE_USERGROUPINFO(G_ID      INTEGER not null,G_NAME    NVARCHAR2(50),G_TYPE    NVARCHAR2(50),G_PURVIEW BLOB,G_REMARK  NVARCHAR2(200))");
                        pWorkspace.ExecuteSQL("create sequence ICE_USERGROUPINFO_SEQ minvalue 1 maxvalue 9999999999 start with 1 increment by 1 cache 30 order");
                        pWorkspace.ExecuteSQL("create or replace trigger ICE_USERGROUPINFO_TG before insert on  ICE_USERGROUPINFO for each row begin if :NEW.G_ID=0 or :NEW.G_ID is null then SELECT  ICE_USERGROUPINFO_SEQ.NEXTVAL   INTO   :NEW.G_ID   FROM   DUAL; end if; end;");

                        //创建用户组关系表
                        pWorkspace.ExecuteSQL("create table ICE_USERGROUPRELATION(U_ID     INTEGER,G_ID     INTEGER)");

                        //创建用户信息表//需要创建触发器
                        pWorkspace.ExecuteSQL("create table ICE_USERINFO(U_ID      INTEGER not null,U_NAME    NVARCHAR2(50),U_PWD     NVARCHAR2(50),U_SEX     INTEGER,U_JOB     NVARCHAR2(50),U_REMARK  NVARCHAR2(200),LOGININFO NVARCHAR2(500))");
                        pWorkspace.ExecuteSQL("create sequence ICE_USERINFO_SEQ minvalue 1 maxvalue 9999999999 start with 1 increment by 1 cache 30 order");
                        pWorkspace.ExecuteSQL("create or replace trigger ICE_USERINFO_TG before insert on ICE_USERINFO for each row begin if :NEW.U_ID=0 or :NEW.U_ID is null then SELECT ICE_USERINFO_SEQ.NEXTVAL   INTO   :NEW.U_ID   FROM   DUAL; end if; end;");

                        //创建更新日志表

                        pWorkspace.ExecuteSQL("create table UPDATELOG(GOFID      INTEGER,STATE      INTEGER,OID        INTEGER,EID        INTEGER,STATUS     INTEGER,SAVE       INTEGER,NEW        INTEGER,LAYERNAME  NVARCHAR2(50),LASTUPDATE NVARCHAR2(50),PROJECTID  INTEGER,CASEID     NVARCHAR2(50))");

                        //创建DID与FID关系表

                        pWorkspace.ExecuteSQL("create table DID与FID关系表(DID      INTEGER,FID      INTEGER)");

                        pWorkspace.ExecuteSQL("create table UPDATERES(PRO_ID INTEGER,FCNAME NVARCHAR2(50),OID INTEGER)");
                    }

                    if (FIDIsAutoIncrease)
                    {   //创建FID记录表//创建触发器
                        pWorkspace.ExecuteSQL("create table FID记录表(GOFID  INTEGER not null,FCNAME NVARCHAR2(50),OID    INTEGER)");
                        pWorkspace.ExecuteSQL("create sequence FID记录表_SEQ minvalue 1 maxvalue 9999999999 start with 1 increment by 1 cache 30 order");
                        pWorkspace.ExecuteSQL("create or replace trigger FID记录表_TG before insert on FID记录表 for each row begin if :NEW.GOFID=0 or :NEW.GOFID is null then SELECT FID记录表_SEQ.NEXTVAL   INTO   :NEW.GOFID   FROM   DUAL; end if; end;");
                    }
                    else
                    {
                        pWorkspace.ExecuteSQL("create table FID记录表(GOFID  INTEGER,FCNAME NVARCHAR2(50),OID    INTEGER)");
                    }
                }
            }
            catch (Exception ex)
            {
                //*******************************************************************
                //Exception Log
                if (ModData.SysLog != null)
                {
                    ModData.SysLog.Write(ex, null, DateTime.Now);
                }
                else
                {
                    ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                    ModData.SysLog.Write(ex, null, DateTime.Now);
                }
                //********************************************************************
                eError = ex;
            }

            pWorkspace = null;

            if (eError != null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Example #18
0
        private string strSrcFiled       = null; //源图层的字段名
        public override bool Check(ref List <Error> checkResult)
        {
            IFeatureClass  pResultFc  = null;
            IFeatureCursor pResultCur = null;

            try{
                string path = string.Format("{0}\\{1}", System.IO.Path.GetDirectoryName(m_QueryWorkspace.PathName), COMMONCONST.DB_Name_Temp);
                //创建临时操作tempdist.mdb,防止把所有结果库数据存储到query库,引起query库超限
                if (File.Exists(path))
                {
                    Hy.Common.Utility.Esri.AEAccessFactory.OpenPGDB(ref TempWorkspace, path);
                }
                else
                {
                    Hy.Common.Utility.Esri.AEAccessFactory.CreatePGDB(System.IO.Path.GetDirectoryName(m_QueryWorkspace.PathName), COMMONCONST.DB_Name_Temp, ref TempWorkspace);
                }
                if (TempWorkspace == null)
                {
                    SendMessage(enumMessageType.RuleError, "创建临时操作数据库失败!无法执行检查!");
                    return(false);
                }
                // 生成中间结果图层
                // 线物不能穿越地类图斑的检查使用Identity进行,其余都使用Intersect
                // 仅适用于二调质检
                string     Resultlayer = strSrcLayer + "_Intersect";
                IGPProcess gpProcess   = null;
                string     strKey      = strSrcLayer.ToUpper();
                string     inputtables = string.Format(@"""{0}\{1}\{2}"";""{0}\{1}\{3}""", m_BaseWorkspace.PathName, "Dataset", strSrcLayer, strRelLayer);
                Intersect  spIntersect = new Intersect();
                spIntersect.in_features       = inputtables;
                spIntersect.cluster_tolerance = "0.001 Meters";
                spIntersect.join_attributes   = "ALL";
                spIntersect.out_feature_class = TempWorkspace.PathName + "\\" + Resultlayer;
                spIntersect.output_type       = "INPUT";

                gpProcess = spIntersect;
                m_gp      = new Geoprocessor();
                Execute(gpProcess);

                // 等待gp
                int counter = 0;
                while (counter++ < 100)
                {
                    if ((TempWorkspace as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, Resultlayer))
                    {
                        break;
                    }

                    System.Threading.Thread.Sleep(100);
                }
                if (m_gp != null)
                {
                    gpProcess = null;
                    m_gp      = null;
                    GC.Collect();
                }
                // 从结果图层中取出错误
                pResultFc = ((IFeatureWorkspace)TempWorkspace).OpenFeatureClass(Resultlayer);
                IQueryFilter pQry = new QueryFilterClass();

                switch (strKey)
                {
                case "LXDW":
                    pQry.WhereClause = "ZLTBBH<>TBBH";
                    break;

                case "XZDW":        //线物不能穿越地类图斑、线物要素的扣除检查
                    if (m_pPara.strAlias.IndexOf("线物不能穿越地类图斑") > -1)
                    {
                        string strClause = " and Avg(len_dist)-sum(shape_length)< " + (1 * this.m_UnitScale).ToString("N7");
                        TempWorkspace.ExecuteSQL(string.Format("delete from XZDW_Intersect where  fid_XZDW in (SELECT fid_xzdw FROM xzdw_Intersect GROUP BY fid_xzdw,fid_dltb having count(0)>1 {0}) and fid_dltb in (SELECT fid_dltb FROM xzdw_Intersect GROUP BY fid_xzdw,fid_dltb having count(0)>1 {0})", strClause));

                        pQry.SubFields   = " Distinct BSM,FID_XZDW,BSM_1";
                        pQry.WhereClause = "len_dist-shape_length>" + (1 * this.m_UnitScale).ToString("N7") + " and shape_length>" + (0.2 * this.m_UnitScale).ToString("N7");
//                            pQry.WhereClause = "len_dist-shape_length>" + (1 * this.m_UnitScale).ToString("N7") + " and shape_length>" + (0.2 * this.m_UnitScale).ToString("N7") + @" and
//                                                    fid_xzdw in
//                                                    (
//                                                    select a.fid_xzdw from
//                                                    (select fid_xzdw from xzdw_Intersect group by fid_xzdw having count(0)>1) as a,
//                                                    (SELECT fid_xzdw FROM xzdw_Intersect GROUP BY fid_xzdw,fid_dltb having count(0)=1) as b
//                                                    where a.fid_xzd9w=b.fid_xzdw
//                                                    )";
                    }
                    else
                    {
                        if (m_pPara.strAlias.IndexOf("线物要素的扣除检查") > -1)
                        {
                            pQry.WhereClause = getkcblsql();
                        }
                    }
                    break;

                default:
                    pQry.WhereClause = "left(ZLDWDM,12)<>XZQDM and shape_Area>" + (400 * this.m_UnitScale).ToString("N7");
                    break;
                }
                pResultCur  = pResultFc.Search(pQry, true);
                checkResult = GetResult(pResultCur as ICursor);

                // 更新状态
                string _strSql = "update LR_ResultEntryRule set TargetFeatClass1= '" + m_pPara.strGeographyObject +
                                 "',TargetFeatClass2='" + m_pPara.strGraphSpeckle +
                                 "|' where RuleInstID='" + this.m_InstanceID + "'";

                Hy.Common.Utility.Data.AdoDbHelper.ExecuteSql(this.m_ResultConnection, _strSql);
                // 释放资源,删除中间结果
                if (pResultCur != null)
                {
                    Marshal.ReleaseComObject(pResultCur);
                    pResultCur = null;
                }
                ((IDataset)pResultFc).Delete();

                return(true);
            }
            catch (Exception ex)
            {
                SendMessage(enumMessageType.Exception, ex.ToString());
                return(false);
            }
            finally
            {
                if (m_gp != null)
                {
                    m_gp = null;
                }
                // 释放资源,删除中间结果
                if (pResultCur != null)
                {
                    Marshal.ReleaseComObject(pResultCur);
                    pResultCur = null;
                }
                if (pResultFc != null)
                {
                    Marshal.ReleaseComObject(pResultFc);
                    pResultFc = null;
                }
                //压缩临时数据库
                IDatabaseCompact databaseCompact = TempWorkspace as IDatabaseCompact;
                if (databaseCompact != null)
                {
                    if (databaseCompact.CanCompact())
                    {
                        databaseCompact.Compact();
                    }
                }
                if (TempWorkspace != null)
                {
                    Marshal.ReleaseComObject(TempWorkspace);
                    TempWorkspace = null;
                }
                GC.Collect();
            }
        }
Example #19
0
        private void btnok_Click(object sender, EventArgs e)
        {
            try
            {
                //ICursor pCursor;
                //IFeatureSelection pFS = pLayer as IFeatureSelection;
                //ISelectionSet pST = pFS.SelectionSet;
                //pST.Search(null, false, out pCursor);
                //IFeatureCursor pFCursor = pCursor as IFeatureCursor;
                //IFeature pFeature = pFCursor.NextFeature();
                IFeatureLayer     pFLayer    = pLayer as IFeatureLayer;
                IFeatureClass     pFClass    = pFLayer.FeatureClass;
                string            TableName  = pFClass.AliasName;
                IDataset          pDSet      = pFLayer as IDataset;
                IWorkspace        pWorkSpace = pDSet.Workspace;
                IFeatureWorkspace pFWSpace   = pWorkSpace as IFeatureWorkspace;
                string            strSQL     = "update " + TableName + " set " + cmbCalField.Text + "=" + RtbCal.Text;
                pWorkSpace.ExecuteSQL(strSQL);
            }
            catch (System.Exception ex)
            {
                //MessageBox.Show(ex.ToString());
                if (ex.ToString().Contains("未实现该方法"))
                {
                    try
                    {
                        ITable  pTable    = pLayer as ITable;
                        IFields pFields   = pTable.Fields;
                        IField  pFieldDec = null;
                        IField  pFieldSor = null;
                        int     nFieldDec = 0;
                        int     nFieldSor = 0;
                        for (int i = 0; i < pFields.FieldCount; i++)
                        {
                            if (pFields.get_Field(i).Name == cmbCalField.Text)
                            {
                                pFieldDec = pFields.get_Field(i);
                                nFieldDec = i;
                            }
                            if (pFields.get_Field(i).Name == RtbCal.Text)
                            {
                                pFieldSor = pFields.get_Field(i);
                                nFieldSor = i;
                            }
                        }

                        ICursor           pCursor;
                        IFeatureSelection pFS = pLayer as IFeatureSelection;
                        ISelectionSet     pST = pFS.SelectionSet;
                        if (pST.Count > 0)
                        {
                            pST.Search(null, false, out pCursor);
                            IFeatureCursor pFCursor = pCursor as IFeatureCursor;
                            IFeature       pFeature = pFCursor.NextFeature();
                            while (pFeature != null)
                            {
                                if (pFieldSor.Type == esriFieldType.esriFieldTypeDouble)
                                {
                                    pFeature.set_Value(nFieldDec, Convert.ToSingle(pFeature.get_Value(nFieldSor)));
                                }
                                else
                                {
                                    pFeature.set_Value(nFieldDec, pFeature.get_Value(nFieldSor));
                                }
                                pFeature = pFCursor.NextFeature();
                            }
                        }
                        else
                        {
                            IFeatureLayer  pFLayer  = pLayer as IFeatureLayer;
                            IFeatureCursor pFCursor = pFLayer.Search(null, false);
                            IFeature       pFeature = pFCursor.NextFeature();
                            while (pFeature != null)
                            {
                                if (pFieldSor.Type == esriFieldType.esriFieldTypeDouble)
                                {
                                    pFeature.set_Value(nFieldDec, Convert.ToSingle(pFeature.get_Value(nFieldSor)));
                                }
                                else
                                {
                                    pFeature.set_Value(nFieldDec, pFeature.get_Value(nFieldSor));
                                }
                                pFeature.Store();
                                pFeature = pFCursor.NextFeature();
                            }
                        }
                    }

                    catch (System.Exception ee)
                    {
                        MessageBox.Show(ee.ToString());
                    }
                }
            }
        }
Example #20
0
        private void Load3DLayers2()
        {
            IWorkspace wsSource = GISOpr.getInstance().WorkSpace;
            // 为了在Skyline下预览数据, 必须取得数据库的连接信息
            DBCore       db                  = new DBCore(true);
            IList        paramList           = db.GetAll(typeof(Tbsysparams), "Paramid");
            IPropertySet workspaceProperySet = new PropertySetClass();

            foreach (Tbsysparams param in paramList)
            {
                if (param.Paramenname.ToUpper() == "SDESERVER")
                {
                    workspaceProperySet.SetProperty("Server", param.Paramvalue);
                }
                if (param.Paramenname.ToUpper() == "SDEINSTANCE")
                {
                    workspaceProperySet.SetProperty("Instance", param.Paramvalue);
                }
                if (param.Paramenname.ToUpper() == "SDEVERSION")
                {
                    workspaceProperySet.SetProperty("Version", param.Paramvalue);
                }
                if (param.Paramenname.ToUpper() == "SDEUSER")
                {
                    workspaceProperySet.SetProperty("User", param.Paramvalue);
                }
                if (param.Paramenname.ToUpper() == "SDEPASSWORD")
                {
                    workspaceProperySet.SetProperty("Password", param.Paramvalue);
                }
            }
            IWorkspaceCatalogItem itemWorkspace = new WorkspaceCatalogItem(workspaceProperySet, Hy.Catalog.Utility.enumWorkspaceType.SDE, null, "当前空间数据库");

            if ((wsSource as IWorkspace2).get_NameExists(esriDatasetType.esriDTTable, "ThreeDimenLayersCache"))
            {
                IFeatureWorkspace fwsSource = (wsSource as IFeatureWorkspace);
                ITable            t3DLayers = fwsSource.OpenTable("ThreeDimenLayersCache");
                ICursor           cursor    = t3DLayers.Search(null, true);
                IRow rowLayer   = cursor.NextRow();
                int  fNameIndex = cursor.FindField("LayerName");
                int  fTypeIndex = cursor.FindField("LayerType");
                int  f3DType    = (int)enumCatalogType.FeatureClass3D;
                while (rowLayer != null)
                {
                    if (f3DType == Convert.ToInt32(rowLayer.get_Value(fTypeIndex)))
                    {
                        IFeatureClass fClass3D = fwsSource.OpenFeatureClass(rowLayer.get_Value(fNameIndex) as string);

                        //
                        ICatalogItem curItem = new FeatureClassCatalogItem((fClass3D as IDataset).FullName as IDatasetName, null);
                        curItem.WorkspaceItem = itemWorkspace;
                        TreeNode node3D = this.m_Node3D.Nodes.Add(curItem.Name);
                        node3D.ImageIndex         = 19;
                        node3D.SelectedImageIndex = 19;

                        node3D.Tag = curItem;
                    }
                    rowLayer = cursor.NextRow();
                }
            }
            else
            {
                // ParentName和Desription(以及LayerType)都保留,到支持栅格数据时可能用得到
                string strSQL = @"Create Table ThreeDimenLayersCache(
                                    LayerName varchar2(256) not null,
                                    ParentName varchar2(256) ,
                                    Description varchar(4000),
                                    LayerType INTEGER default "
                                + ((int)enumCatalogType.FeatureClass3D).ToString()
                                + ")";

                wsSource.ExecuteSQL(strSQL);

                IEnumDatasetName enDatasetName = wsSource.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
                IDatasetName     dsName3D      = enDatasetName.Next();
                while (dsName3D != null)
                {
                    if ((dsName3D as IFeatureClass).ShapeType == esriGeometryType.esriGeometryMultiPatch)
                    {
                        // 存入数据库缓存并加载到树上
                        strSQL = string.Format("Insert into ThreeDimenLayersCache(LayerName) values('{0}')", dsName3D.Name);
                        wsSource.ExecuteSQL(strSQL);

                        //
                        ICatalogItem curItem = new FeatureClassCatalogItem(dsName3D, null);
                        curItem.WorkspaceItem = itemWorkspace;
                        TreeNode node3D = this.m_Node3D.Nodes.Add(curItem.Name);
                        node3D.ImageIndex         = 19;
                        node3D.SelectedImageIndex = 19;

                        node3D.Tag = curItem;
                    }

                    dsName3D = enDatasetName.Next();
                }

                // FeatureDataset底下的3维FeatureClass
                enDatasetName = wsSource.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
                IDatasetName dsNameContainer = enDatasetName.Next();
                while (dsNameContainer != null)
                {
                    IEnumDatasetName enDsName3D = dsNameContainer.SubsetNames;
                    dsName3D = enDsName3D.Next();
                    while (dsName3D != null)
                    {
                        if (dsName3D is IFeatureClass && (dsName3D as IFeatureClass).ShapeType == esriGeometryType.esriGeometryMultiPatch)
                        {
                            // 存入数据库缓存并加载到树上
                            strSQL = string.Format("Insert into ThreeDimenLayersCache(LayerName) values('{0}')", dsName3D.Name);
                            wsSource.ExecuteSQL(strSQL);

                            //
                            ICatalogItem curItem = new FeatureClassCatalogItem(dsName3D, null);
                            curItem.WorkspaceItem = itemWorkspace;
                            TreeNode node3D = this.m_Node3D.Nodes.Add(curItem.Name);
                            node3D.ImageIndex         = 19;
                            node3D.SelectedImageIndex = 19;

                            node3D.Tag = curItem;
                        }

                        dsName3D = enDsName3D.Next();
                    }

                    dsNameContainer = enDatasetName.Next();
                }
            }

            m_Node3D.Expand();
        }