/// <summary> /// 生成统计数据行数的SQL /// </summary> /// <param name="CountSql"></param> /// <param name="Col"></param> /// <returns></returns> protected virtual ODAScript GetCountSql(IODAColumns Col) { if (_Groupby.Count > 0 || _Having.Count > 0) { throw new ODAException(10006, "Do not count the [Group by] cmd,You should probably use [ ToView(Columns).Count()] instead."); } ODAScript sql = new ODAScript() { ScriptType = SQLType.Select, DataBaseId = this.DataBaseId, }; if (_Distinct) { sql.SqlScript.Append("SELECT COUNT(DISTINCT "); } else { sql.SqlScript.Append("SELECT COUNT("); } if (System.Object.ReferenceEquals(Col, null)) { sql.SqlScript.Append("*"); } else { string SubSelectSql = ""; ODAParameter[] SubSelectPrms = GetSelectColumns(",", out SubSelectSql, Col); sql.SqlScript.Append(SubSelectSql); if (SubSelectPrms != null && SubSelectPrms.Length > 0) { sql.ParamList.AddRange(SubSelectPrms); } } sql.SqlScript.Append(") AS TOTAL_RECORD"); var fSql = GetFromSubString(); sql.Merge(fSql); if (_WhereList.Count > 0 || _OrList.Count > 0) { sql.SqlScript.Append(" WHERE "); var asql = GetWhereSubSql(_WhereList, " AND "); sql.Merge(asql); if (_OrList.Count > 0) { if (_WhereList.Count > 0) { sql.SqlScript.Append(" OR "); } var osql = GetWhereSubSql(_OrList, " OR "); sql.Merge(osql); } } return(sql); }
/// <summary> /// 在数据库中执行select count 语句,返统计结果 /// </summary> /// <param name="Col"></param> /// <returns></returns> protected virtual int CountRecords(IODAColumns Col = null) { var sql = this.GetCountSql(Col); var db = this.GetDBAccess(sql); if (db == null) throw new ODAException(10007, "ODACmd Count 没有执行程序"); object[] vl = db.SelectFirst(sql.SqlScript.ToString(), sql.ParamList.ToArray()); return int.Parse(vl[0].ToString()); }
/// <summary> /// 在数据库中执行select count 语句,返统计结果 /// </summary> /// <param name="Col"></param> /// <returns></returns> public virtual int Count(IODAColumns Col = null) { try { return(CountRecords(Col)); } finally { this.Clear(); } }