/// <summary> /// Used when the RangeDomain field is of Date type /// This function is used to construct a query string which when executed on the source Feature Class/Table will return the records that violate domain constraints. /// </summary> /// <param name="ipRangeDomain">Range domain applied to the Date type field whose attributes are getting validated</param> /// <param name="strFieldName">Name of the Date type field</param> /// <returns></returns> private string GetDateQueryStringForRangeDomain(IRangeDomain ipRangeDomain, string strFieldName) { if (null == ipRangeDomain || string.IsNullOrEmpty(strFieldName)) return ""; if (null == m_ipWorkspace) return ""; string strQueryString = strFieldName + " < {0} OR " + strFieldName + " > {1}"; string strMinValue = Convert.ToString(ipRangeDomain.MinValue); string strMaxValue = Convert.ToString(ipRangeDomain.MaxValue); DateTime dateMinValue = Convert.ToDateTime(ipRangeDomain.MinValue); DateTime dateMaxValue = Convert.ToDateTime(ipRangeDomain.MaxValue); string strYearMin = dateMinValue.Year.ToString(); string strMonthMin = dateMinValue.Month.ToString(); if (dateMinValue.Month < 10) strMonthMin = "0" + strMonthMin; string strDayMin = dateMinValue.Day.ToString(); if (dateMinValue.Day < 10) strDayMin = "0" + strDayMin; string strHourMin = dateMinValue.Hour.ToString(); if (dateMinValue.Hour < 10) strHourMin = "0" + strHourMin; string strMinMin = dateMinValue.Minute.ToString(); if (dateMinValue.Minute < 10) strMinMin = "0" + strMinMin; string strSecMin = dateMinValue.Second.ToString(); if (dateMinValue.Second < 10) strSecMin = "0" + strSecMin; string strYearMax = dateMaxValue.Year.ToString(); string strMonthMax = dateMaxValue.Month.ToString(); if (dateMaxValue.Month < 10) strYearMax = "0" + strYearMax; string strDayMax = dateMaxValue.Day.ToString(); if (dateMaxValue.Day < 10) strDayMax = "0" + strDayMax; string strHourMax = dateMaxValue.Hour.ToString(); if (dateMaxValue.Hour < 10) strHourMax = "0" + strHourMax; string strMinMax = dateMaxValue.Minute.ToString(); if (dateMaxValue.Minute < 10) strMinMax = "0" + strMinMax; string strSecMax = dateMaxValue.Second.ToString(); if (dateMaxValue.Second < 10) strSecMax = "0" + strSecMax; string strFormattedDateMin = string.Format("to_date('{0}-{1}-{2} {3}:{4}:{5}', 'dd-mm-yyyy hh24:mi:ss')", strDayMin, strMonthMin, strYearMin, strHourMin, strMinMin, strSecMin); string strFormattedDateMax = string.Format("to_date('{0}-{1}-{2} {3}:{4}:{5}', 'dd-mm-yyyy hh24:mi:ss')", strDayMax, strMonthMax, strYearMax, strHourMax, strMinMax, strSecMax); DatabaseType eDBType = GetDatabaseType(m_ipWorkspace); if(eDBType == DatabaseType.FGDB || eDBType == DatabaseType.SHAPEFILE) { string strNewMinValue = "date '" + strMinValue + "'"; string strNewMaxValue = "date '" + strMaxValue + "'"; strQueryString = string.Format(strQueryString, strNewMinValue, strNewMaxValue); } else if (eDBType == DatabaseType.MDB) { string strNewMinValue = "#" + strMinValue + "#"; string strNewMaxValue = "#" + strMaxValue + "#"; strQueryString = string.Format(strQueryString, strNewMinValue, strNewMaxValue); } else if (eDBType == DatabaseType.ORACLE) { string strNewMinValue = strFormattedDateMin; string strNewMaxValue = strFormattedDateMax; strQueryString = string.Format(strQueryString, strNewMinValue, strNewMaxValue); } else if (eDBType == DatabaseType.POSTGRESQL || eDBType == DatabaseType.SQLSERVER) { string strNewMinValue = "'" + strMinValue + "'"; string strNewMaxValue = "'" + strMaxValue + "'"; strQueryString = string.Format(strQueryString, strNewMinValue, strNewMaxValue); } else { strQueryString = ""; } return strQueryString; }
/// <summary> /// Used for RangeDomain /// This function is used to construct a query string which when executed on the source Feature Class/Table will return the records that violate domain constraints. /// </summary> /// <param name="ipRangeDomain">Range domain applied to the field whose attributes are getting validated</param> /// <param name="strFieldName">Name of the field</param> /// <returns></returns> private string GetQueryStringForRangeDomain(IRangeDomain ipRangeDomain, string strFieldName) { if (null == ipRangeDomain || string.IsNullOrEmpty(strFieldName)) return ""; string strQueryString = strFieldName + " < {0} OR " + strFieldName + " > {1}"; IDomain ipDomain = ipRangeDomain as IDomain; if(ipDomain.FieldType == esriFieldType.esriFieldTypeDate) { strQueryString = GetDateQueryStringForRangeDomain(ipRangeDomain, strFieldName); } else if(ipDomain.FieldType == esriFieldType.esriFieldTypeDouble || ipDomain.FieldType == esriFieldType.esriFieldTypeInteger || ipDomain.FieldType == esriFieldType.esriFieldTypeSingle || ipDomain.FieldType == esriFieldType.esriFieldTypeSmallInteger ) { double dblMinValue = Convert.ToDouble(ipRangeDomain.MinValue); double dblMaxValue = Convert.ToDouble(ipRangeDomain.MaxValue); strQueryString = string.Format(strQueryString, dblMinValue.ToString(), dblMaxValue.ToString()); } else { return ""; } return strQueryString; }