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; } }
/// <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); } }
/// <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); }
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); } } }
/// <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); }
/// <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; } }
private void DropTable(string TableName, IWorkspace pW) { try { pW.ExecuteSQL("Drop table " + TableName); } catch { } }
private void DropTable(IWorkspace pWks, string TableName) { try { pWks.ExecuteSQL("drop table " + TableName); } catch { } }
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); }
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); }
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 = "选择查询方案"; }
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(); } }
/// <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; } }
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; } }
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"); } }
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()); } }
/// <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); } }
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(); } }
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()); } } } }
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(); }