/// <summary>
        ///  得到where语句
        /// </summary>
        /// <param name="filters"></param>
        /// <returns></returns>
        internal virtual string GetWhereString(QueryPageFilter filters)
        {
            StringBuilder builder = new StringBuilder();
            int           index   = 0;

            if (filters.Filters != null && filters.Filters.Length > 0)
            {
                foreach (var item in filters.Filters)
                {
                    if (index != 0)
                    {
                        builder.Append(" " + filters.FilterAndOrType.ToString() + " ");
                    }
                    string str = string.Empty;
                    if (item is QueryFilter)
                    {
                        str = GetSqlSign(item as QueryFilter);
                    }
                    if (item is AndOrQueryFilter)
                    {
                        str = GetSqlSign(item as AndOrQueryFilter);
                    }
                    builder.Append(str);
                    index++;
                }
            }
            if (index == 0)
            {
                return("1=1");
            }
            return(builder.ToString());
        }
        public Dictionary <string, object>[] GetQueryResultN(QueryPageFilter filter)
        {
            string tableName1 = filter.TableName;

            if (TableToTableNameDic != null && TableToTableNameDic.ContainsKey(filter.TableName))
            {
                tableName1 = TableToTableNameDic[filter.TableName];
            }
            if (!DataBaseKyFieldTableDic.ContainsKey(tableName1))
            {
                throw new Exception("缺少表或视图:" + tableName1 + "!请联系开发人员!");
            }
            filter.TableName = tableName1;
            var result = GetQueryResultFromDB(filter);

            if (filter.IsReturnCount != true)
            {
                if (result.Result != null)
                {
                    var list = ConvertDataTable(result.Result);
                    return(list.ToArray());
                }
            }
            return(null);
        }
 /// <summary>
 /// 得到值
 /// </summary>
 /// <param name="fieldValue"></param>
 /// <returns></returns>
 internal virtual string GetFieldValue(object fieldValue)
 {
     if (QueryPageFilter.IsSqlFilter(fieldValue) == true)
     {
         throw new Exception("数据中含SQL注入,请误使用!");
     }
     if (fieldValue is string)
     {
         string str = fieldValue.ToString();
         if (str.IndexOf("'") > -1)
         {
             str = str.Replace("'", "''");
         }
         return(string.Format("'{0}'", str));
     }
     if (fieldValue is DBNull || fieldValue is DateTime || fieldValue is Guid)
     {
         return(string.Format("'{0}'", fieldValue.ToString()));
     }
     if (fieldValue is Boolean)
     {
         bool t = (Boolean)fieldValue;
         return(t ? 1.ToString() : 0.ToString());
     }
     else
     {
         if (fieldValue == null)
         {
             return(null);
         }
         return(fieldValue.ToString());
     }
 }
        /// <summary>
        /// 得到group by语句
        /// </summary>
        /// <param name="filters"></param>
        /// <returns></returns>
        internal virtual string GetGroupByStrings(QueryPageFilter filters)
        {
            string fields = string.Empty;

            if (filters != null && filters.GroupByFieldNames != null && filters.GroupByFieldNames.Length > 0)
            {
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < filters.GroupByFieldNames.Length; i++)
                {
                    builder.Append(filters.GroupByFieldNames[i]);
                    if (i != filters.GroupByFieldNames.Length - 1)
                    {
                        builder.Append(",");
                    }
                }
                fields = builder.ToString();
            }
            var groupBy = string.Empty;

            if (!string.IsNullOrEmpty(fields))
            {
                groupBy = "group by " + fields;
            }
            return(groupBy);
        }
        /// <summary>
        /// 得到order by语句
        /// </summary>
        /// <param name="filters"></param>
        /// <returns></returns>
        internal virtual string GetOrderByString(QueryPageFilter filters)
        {
            string orderBy = string.Empty;

            if (filters != null && filters.OrderFieldNames != null && filters.OrderFieldNames.Length > 0)
            {
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < filters.OrderFieldNames.Length; i++)
                {
                    builder.Append(filters.OrderFieldNames[i]);
                    if (filters.OrderByType == SQLOrderBy.Desc)
                    {
                        builder.Append(" desc ");
                    }
                    else
                    {
                        builder.Append(" asc ");
                    }
                    if (i != filters.OrderFieldNames.Length - 1)
                    {
                        builder.Append(",");
                    }
                }
                orderBy = " order by " + builder.ToString();
            }
            return(orderBy);
        }
        public void UpdateObjects(Dictionary <string, object> objs, QueryPageFilter filter)
        {
            string tableName1 = filter.TableName;

            if (TableToTableNameDic != null && TableToTableNameDic.ContainsKey(filter.TableName))
            {
                tableName1 = TableToTableNameDic[filter.TableName];
            }
            if (!DataBaseKyFieldTableDic.ContainsKey(tableName1))
            {
                throw new Exception("缺少表或视图:" + tableName1 + "!请联系开发人员!");
            }
            filter.TableName = tableName1;
            string        whereStr = GetWhereString(filter);
            StringBuilder fields   = new StringBuilder();

            foreach (var item in objs)
            {
                SqlField field;
                var      typeName = DicTableToTableNameFields[filter.TableName][item.Key];
                if (typeName == "datetime" && item.Value != null)
                {
                    var date = DateTime.Parse(item.Value.ToString());
                    field = new SqlField(item.Key, date, CurrPrividerType);
                }
                else
                {
                    field = new SqlField(item.Key, item.Value, CurrPrividerType);
                }
                if (fields.Length > 0)
                {
                    fields.Append(",");
                }
                fields.Append(field.GetKeyEqualsValueString());
            }

            var updateSql = string.Format("update {0} set {1} where {2} ", tableName1, fields.ToString(), whereStr);
            var conn      = DBClassHelper.OpenConnect(CurrConnectionString, SqlHelperFactory.GetSqlPrividerTypeName(CurrPrividerType));
            int count     = DBClassHelper.Execute(updateSql, conn);

            conn.Close();
        }
        /// <summary>
        /// 得到查询字段
        /// </summary>
        /// <param name="filters"></param>
        /// <returns></returns>
        internal virtual string GetQueryFields(QueryPageFilter filters)
        {
            if (filters.ReturnFieldNames == null || filters.ReturnFieldNames.Length == 0)
            {
                return(GetFieldFromTable(filters.TableName));
            }
            StringBuilder builder = new StringBuilder();

            for (int i = 0; i < filters.ReturnFieldNames.Length; i++)
            {
                if (builder.Length > 0)
                {
                    builder.Append(",");
                }
                else
                {
                    builder.Append(filters.ReturnFieldNames[i]);
                }
            }
            return(builder.ToString());
        }
        public void DeleteObjects(QueryPageFilter filters)
        {
            string tableName1 = filters.TableName;

            if (TableToTableNameDic != null && TableToTableNameDic.ContainsKey(filters.TableName))
            {
                tableName1 = TableToTableNameDic[filters.TableName];
            }
            if (!DataBaseKyFieldTableDic.ContainsKey(tableName1))
            {
                throw new Exception("缺少表或视图:" + tableName1 + "!请联系开发人员!");
            }
            filters.TableName = tableName1;
            string whereStr = GetWhereString(filters);
            string strSql   = string.Empty;

            strSql = "delete from " + filters.TableName + " where " + whereStr;
            var conn  = DBClassHelper.OpenConnect(CurrConnectionString, SqlHelperFactory.GetSqlPrividerTypeName(CurrPrividerType));
            int count = DBClassHelper.Execute(strSql, conn);

            conn.Close();
        }
Esempio n. 9
0
        /*
         * public override void ExecuteSqlList(List<string> sqlList)
         * {
         *  var sqls = sqlList.Where(m => string.IsNullOrEmpty(m) == false).ToList();
         *  var conn = DBClassHelper.OpenConnect(CurrConnectionString, SqlHelperFactory.GetSqlPrividerTypeName(CurrPrividerType));
         *  System.Data.IDbCommand cmd = conn.CreateCommand();
         *  { // <-------------------
         *      try
         *      {
         *          foreach (var item in sqls)
         *          {
         *              cmd.CommandText = item;
         *              cmd.ExecuteNonQuery();
         *          }
         *          cmd.Dispose();
         *      }
         *      catch
         *      {
         *          cmd.Dispose();
         *          throw; // <-------------------
         *      }
         *      finally
         *      {
         *          conn.Close();
         *      }
         *  }
         * }
         */
        /*
         * public override void UpdateSystemTable(string TableName, List<Column> colomns)
         * {
         *  string def = string.Empty;
         *  var builder = new StringBuilder();
         *  var builder2 = new StringBuilder();
         *  var descBuilder = new StringBuilder();
         *  if (TableToTableNameDic.ContainsKey(TableName))
         *  {
         *      int i = 1;
         *      foreach (var item in colomns)
         *      {
         *          i++;
         *          string len = "";
         *          string isNullStr;
         *          if (item.Precision == 0) len = "";
         *          else if (item.Precision == -1) len = "(MAX)";
         *          else len = string.Format("({0})", item.Precision);
         *
         *          if (item.TypeName == "varchar" && string.IsNullOrEmpty(len)) len = "(50)";
         *          if (item.Default != null && !string.IsNullOrEmpty(item.Default))//修改数据库默认值,删除约束,添加约束(添加常量默认值必须加‘ ’;例  'GAAJ')
         *          {
         *              if (item.Default == "'auto'")
         *              {
         *
         *                  //String sql2 = string.Format(@" ALTER TABLE {0} ADD {1} INT IDENTITY (1,1);", TableName, item.ColumnName);
         *                  //builder2.AppendLine(sql2);
         *                  continue;
         *
         *              }
         *              else
         *              {
         *                  def = "((" + item.Default + "))";
         *                  string sql2 = string.Format(@"IF EXISTS(select a.name as 用户表,b.name as 字段名,d.name as 字段默认值约束 from sysobjects a
         *                                            inner join syscolumns b on (a.id=b.id)inner join syscomments c on ( b.cdefault=c.id )
         *                                            inner join sysobjects d on (c.id=d.id)
         *                                             where a.name='{0}'and b.name='{1}')
         *                                             declare @tablename{2} varchar(30)
         *                                             declare @fieldname{2} varchar(50)
         *                                             declare @sql{2} varchar(300)
         *
         *                                             set @tablename{2}='{0}'
         *                                             set @fieldname{2}='{1}'
         *                                             set @sql{2}=''
         *                                             select @sql{2}=@sql{2}+'
         *                                             alter table ['+a.name+'] drop constraint ['+d.name+']'
         *                                             from sysobjects a
         *                                             join syscolumns b on a.id=b.id
         *                                             join syscomments c on b.cdefault=c.id
         *                                             join sysobjects d on c.id=d.id
         *                                             where a.name=@tablename{2} and b.name=@fieldname{2}
         *                                             exec(@sql{2})", TableName, item.ColumnName, i);
         *
         *                  string sql3 = string.Format(@" ALTER TABLE {0}  ADD DEFAULT {1} FOR {2} WITH VALUES", TableName, def, item.ColumnName);
         *
         *                  builder2.AppendLine(sql2 + sql3);
         *              }
         *          }
         *          if (item.IsPrimaryKey == true)
         *          {
         *              isNullStr = "NOT NULL";
         *          }
         *          else
         *          {
         *              isNullStr = "NULL";
         *          }
         *          string sql = string.Format(
         *              @" if exists(select * from syscolumns where id=object_id('{0}') and name='{1}')
         *                          alter table {0} alter column  {1}  {2}{3} {4} ;  else   alter table {0}  add   {1}  {2}{3} {4} ", TableName, item.ColumnName, item.TypeName, len, isNullStr);
         *          var str = string.Format("if exists(SELECT c.name,p.value FROM sys.extended_properties p ,sys.columns c " +
         *              "WHERE p.major_id=OBJECT_ID('{0}') and p.major_id=c.object_id and p.minor_id=c.column_id and c.name = '{2}') " +
         *              "EXECUTE sp_updateextendedproperty N'MS_Description', '{1}', N'user', N'dbo', N'table', N'{0}', N'column', N'{2}';" +
         *              "else EXECUTE sp_addextendedproperty N'MS_Description', '{1}', N'user', N'dbo', N'table', N'{0}', N'column', N'{2}';", TableName, item.Label, item.ColumnName);
         *          builder.AppendLine(sql);
         *          descBuilder.AppendLine(str);
         *      }
         *  }
         *  else
         *  {
         *      var keyCol = colomns.Where(m => m.IsPrimaryKey == true).FirstOrDefault();
         *      if (keyCol == null)
         *          throw new Exception("缺少主键!");
         *      builder.AppendLine(string.Format("CREATE TABLE {0} (", TableName));
         *      foreach (var item in colomns)
         *      {
         *          string defs = string.Empty;
         *          if (item.Default != null)
         *          {
         *              defs = " DEFAULT((" + item.Default + "))";
         *          }
         *          string len = "";
         *          if (item.Precision == 0) len = "";
         *          else if (item.Precision == -1) len = "(MAX)";
         *          else len = string.Format("({0})", item.Precision);
         *
         *          if (item.TypeName == "varchar" && string.IsNullOrEmpty(len)) len = "(50)";
         *          if (item.Default != null && item.Default == "'auto'")
         *          {
         *              builder.AppendLine(string.Format("{0}  INT IDENTITY (1,1),", item.ColumnName));
         *          }
         *          else
         *          {
         *              builder.AppendLine(string.Format("{0}   {1}{2}  {3} null  {4},", item.ColumnName, item.TypeName, len, (item.IsNull ? "" : " not "), defs));
         *          }
         *
         *          var str = string.Format("EXECUTE sp_addextendedproperty N'MS_Description', '{1}', N'user', N'dbo', N'table', N'{0}', N'column', N'{2}'", TableName, item.Label, item.ColumnName);
         *          descBuilder.AppendLine(str);
         *      }
         *      builder.AppendLine(string.Format(" constraint PK_{0} primary key clustered ({1})); ", TableName, keyCol.ColumnName));
         *  }
         *  // builder.AppendLine(descBuilder.ToString());
         *  var strSql = builder.ToString();
         *  var descSql = descBuilder.ToString();
         *  var defSql = builder2.ToString();
         *  if (!string.IsNullOrEmpty(strSql))
         *  {
         *      var conn = DBClassHelper.OpenConnect(CurrConnectionString, SqlHelperFactory.GetSqlPrividerTypeName(CurrPrividerType));
         *      int count = DBClassHelper.Execute(strSql, conn);
         *      if (!string.IsNullOrEmpty(descSql))
         *      {
         *          DBClassHelper.Execute(descSql, conn);
         *      }
         *      if (!string.IsNullOrEmpty(defSql))
         *      {
         *          DBClassHelper.Execute(defSql, conn);
         *      }
         *      GetSqlTableInfo();
         *      conn.Close();
         *  }
         * }
         */
        internal override FilterQueryResult GetQueryResultFromDB(QueryPageFilter filters)
        {
            FilterQueryResult result   = new FilterQueryResult();
            string            whereStr = GetWhereString(filters);
            string            orderBy  = GetOrderByString(filters);
            string            groupBy  = GetGroupByStrings(filters);
            var    fields = GetQueryFields(filters);
            string sql    = "select count(*) from " + filters.TableName + " where " + whereStr;
            string strSql = string.Empty;

            if (filters.IsPage == true)
            {
                var index = filters.PageSize * (filters.PageIndex - 1);
                if (index < 0)
                {
                    index = 0;
                }
                var keyField       = m_DataBaseKyFieldTableDic[filters.TableName];
                var allFieldsArr   = m_DicTableToTableNameFields[filters.TableName];
                var queryFieldsArr = fields.Replace(" ", "").Split(',');

                if (string.IsNullOrEmpty(keyField) && fields.Replace(" ", "") == "*" && allFieldsArr.ContainsKey("ID"))
                {
                    keyField = "ID";
                }
                if (string.IsNullOrEmpty(keyField) && fields.Replace(" ", "") == "*" && !allFieldsArr.ContainsKey("ID"))
                {
                    keyField = queryFieldsArr.First();
                }
                if (string.IsNullOrEmpty(keyField) && fields.Replace(" ", "") != "*" && queryFieldsArr.Contains("ID"))
                {
                    keyField = "ID";
                }
                if (string.IsNullOrEmpty(keyField) && fields.Replace(" ", "") != "*" && !queryFieldsArr.Contains("ID"))
                {
                    keyField = queryFieldsArr.First();
                }

                if (string.IsNullOrEmpty(orderBy))
                {
                    orderBy = " order by " + keyField + " ASC ";
                }
                else
                {
                    orderBy = orderBy + "," + keyField + " ASC ";
                }

                var pageSize = filters.PageSize;
                if (pageSize == 0)
                {
                    pageSize = 1;
                }
                //分页查询优化,FZP
                strSql = string.Format("select {0} from {1} where {2} {3} offset {4} rows fetch next {5} rows only", fields, filters.TableName, whereStr, orderBy, index, pageSize);
            }
            else
            {
                strSql = "select  " + fields + " from " + filters.TableName + " where " + whereStr + groupBy + orderBy;
            }
            var conn       = DBClassHelper.OpenConnect(CurrConnectionString, SqlHelperFactory.GetSqlPrividerTypeName(CurrPrividerType));
            var tableCount = DBClassHelper.ExecuteQueryToDataTable(sql, conn);
            int count      = int.Parse(tableCount.Rows[0][0].ToString());

            if (filters.IsReturnCount == false)
            {
                var table = DBClassHelper.ExecuteQueryToDataTable(strSql, conn);
                result.Result           = table;
                result.Result.TableName = filters.TableName;
            }
            result.TotalCount = count;
            conn.Close();
            return(result);
        }