/// <summary> /// 根据查询条件创建Sql命令 /// </summary> /// <param name="searchExpression"></param> /// <param name="searchOrders"></param> /// <returns></returns> public virtual DbCommand CreateDbCommand(ISearchExpression searchExpression, IList <ISearchOrder> searchOrders) { DbCommand cmd = DbHelper.Instance.Database.DbProviderFactory.CreateCommand(); cmd.CommandType = System.Data.CommandType.Text; if (searchExpression is QueryExpression) { string s = (searchExpression as QueryExpression).Query; cmd.CommandText = s; } else { int paramCnt = 0; if (this.EnablePage && m_dataCanPage) { } else { cmd.CommandText = m_selectSql; // Add Where if (searchExpression != null) { string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, false, ref paramCnt, m_selectAsColumns); if (!string.IsNullOrEmpty(s)) { cmd.CommandText += " WHERE " + s; } } string groupBy = SearchManager.GetGroupCommand(m_groupBySql); if (!string.IsNullOrEmpty(groupBy)) { cmd.CommandText += groupBy; // Add Having if (searchExpression != null) { string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, true, ref paramCnt, m_selectAsColumns); if (!string.IsNullOrEmpty(s)) { cmd.CommandText += " HAVING " + s; } } } cmd.CommandText += SearchManager.GetSqlOrders(searchOrders, false, null); } if (paramCnt > 2100) { throw new NotSupportedException("您输入的参数过多,系统最多只支持2100个参数!"); } } return(cmd); }
/// <summary> /// /// </summary> /// <param name="searchExpression"></param> /// <returns></returns> public virtual DbCommand CreateCountDbCommand(ISearchExpression searchExpression) { DbCommand cmd = DbHelper.Instance.Database.DbProviderFactory.CreateCommand(); cmd.CommandType = System.Data.CommandType.Text; if (searchExpression is QueryExpression) { string str = (searchExpression as QueryExpression).Query; str = str.ToUpper(); int idx = str.IndexOf("' '"); int idx2 = str.IndexOf("FROM"); str = str.Replace(str.Substring(idx, idx2 - idx), " COUNT(*) "); cmd.CommandText = str; } else { int paramCnt = 0; // Add Where if (searchExpression != null) { string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, false, ref paramCnt, m_selectAsColumns); if (!string.IsNullOrEmpty(s)) { cmd.CommandText += " WHERE " + s; } } string groupBy = SearchManager.GetGroupCommand(m_groupBySql); if (!string.IsNullOrEmpty(groupBy)) { cmd.CommandText += groupBy; // Add Having if (searchExpression != null) { string s = SearchManager.FillDbCommand(searchExpression, cmd.Parameters, true, ref paramCnt, m_selectAsColumns); if (!string.IsNullOrEmpty(s)) { cmd.CommandText += " HAVING " + s; } } } if (paramCnt > 2100) { throw new NotSupportedException("您输入的参数过多,系统最多只支持2100个参数!"); } } return(cmd); }