Exemplo n.º 1
0
        public override void QueryTable(IDbAccesser dba, ITableQueryArgs args)
        {
            var pagingInfo = args.PagingInfo;

            if (PagingInfo.IsNullOrEmpty(pagingInfo) || this.GetPagingLocation(pagingInfo) == PagingLocation.Memory)
            {
                base.QueryTable(dba, args);
            }
            else
            {
                //转换为分页查询 SQL
                var parts = ParsePagingSqlParts(args.FormattedSql);
                CreatePagingSql(ref parts, pagingInfo);

                //读取分页的数据
                var table  = args.ResultTable;
                var reader = dba.QueryDataReader(parts.PagingSql, args.Parameters);
                using (reader)
                {
                    LiteDataTableAdapter.Fill(table, reader);
                }

                QueryTotalCountIf(dba, pagingInfo, parts, args.Parameters);
            }
        }
Exemplo n.º 2
0
        public override void QueryList(IDbAccesser dba, ISqlSelectArgs args)
        {
            var pagingInfo = args.PagingInfo;
            if (PagingInfo.IsNullOrEmpty(pagingInfo) || this.GetPagingLocation(pagingInfo) == PagingLocation.Memory)
            {
                base.QueryList(dba, args);
            }
            else
            {
                //转换为分页查询 SQL
                var parts = ParsePagingSqlParts(args.FormattedSql);
                CreatePagingSql(ref parts, pagingInfo);

                //读取分页的实体
                using (var reader = dba.QueryDataReader(parts.PagingSql, args.Parameters))
                {
                    this.FillDataIntoList(
                        reader, ReadDataType.ByName,
                        args.List, args.FetchingFirst, PagingInfo.Empty, args.MarkTreeFullLoaded
                        );
                }

                QueryTotalCountIf(dba, pagingInfo, parts, args.Parameters);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 使用 Sql 进行查询。
        /// 分页默认实现为使用内存进行分页。
        /// </summary>
        /// <param name="dba">The dba.</param>
        /// <param name="args">The arguments.</param>
        public virtual void QueryTable(IDbAccesser dba, ITableQueryArgs args)
        {
            if (_hasLOB)
            {
                args.FormattedSql = this.ReplaceLOBColumns(args.FormattedSql);
            }

            using (var reader = dba.QueryDataReader(args.FormattedSql, args.Parameters))
            {
                var table = args.ResultTable;
                if (table.Columns.Count == 0)
                {
                    LiteDataTableAdapter.AddColumns(table, reader);
                }

                var columnsCount = table.Columns.Count;

                PagingHelper.MemoryPaging(reader, r =>
                {
                    var row = table.NewRow();
                    for (int i = 0; i < columnsCount; i++)
                    {
                        var value = reader[i];
                        if (value != DBNull.Value)
                        {
                            row[i] = value;
                        }
                    }
                    table.Rows.Add(row);
                }, args.PagingInfo);
            }
        }
Exemplo n.º 4
0
        public override void QueryList(IDbAccesser dba, ISqlSelectArgs args)
        {
            var pagingInfo = args.PagingInfo;

            if (PagingInfo.IsNullOrEmpty(pagingInfo) || this.GetPagingLocation(pagingInfo) == PagingLocation.Memory)
            {
                base.QueryList(dba, args);
            }
            else
            {
                //转换为分页查询 SQL
                var parts = ParsePagingSqlParts(args.FormattedSql);
                CreatePagingSql(ref parts, pagingInfo);

                //读取分页的实体
                using (var reader = dba.QueryDataReader(parts.PagingSql, args.Parameters))
                {
                    this.FillDataIntoList(
                        reader, ReadDataType.ByName,
                        args.List, args.FetchingFirst, PagingInfo.Empty, args.MarkTreeFullLoaded
                        );
                }

                QueryTotalCountIf(dba, pagingInfo, parts, args.Parameters);
            }
        }
Exemplo n.º 5
0
        public override void QueryList(IDbAccesser dba, IEntitySelectArgs args)
        {
            /*********************** 代码块解释 *********************************
             *
             * 以下代码用于支持数据库分页
             *
             **********************************************************************/

            //检查分页条件。(如果是树状实体,也不支持在数据库中进行分页。)
            var  pagingInfo = args.PagingInfo;
            bool isPaging   = !PagingInfo.IsNullOrEmpty(pagingInfo) &&
                              this.GetPagingLocation(pagingInfo) == PagingLocation.Database &&
                              !Repository.SupportTree;

            if (isPaging)
            {
                var query = args.Query;
                if (!(query as TableQuery).HasOrdered())
                {
                    throw new InvalidProgramException("分页查询的同时,必须指定排序属性。");
                }

                var autoSelection = AutoSelectionForLOB(query);

                //生成分页 Sql
                var pk          = query.From.FindTable(Repository).Column(Entity.IdProperty);
                var generator   = this.CreateSqlGenerator();
                var pagedSelect = generator.ModifyToPagingTree(query as SqlSelect, pk as SqlColumn, pagingInfo);
                generator.Generate(pagedSelect);
                var pagingSql = generator.Sql;

                //查询数据库
                using (var reader = dba.QueryDataReader(pagingSql, pagingSql.Parameters))
                {
                    //填充到列表中。
                    this.FillDataIntoList(
                        reader, autoSelection ? ReadDataType.ByIndex : ReadDataType.ByName,
                        args.List, false, pagingInfo, args.MarkTreeFullLoaded
                        );
                }

                //最后,如果需要,则统计一下总行数。
                if (pagingInfo.IsNeedCount)
                {
                    pagingInfo.TotalCount = this.Count(dba, query);
                }
            }
            else
            {
                base.QueryList(dba, args);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 使用 Sql 进行查询。
        /// 分页默认实现为使用内存进行分页。
        /// </summary>
        /// <param name="dba">The dba.</param>
        /// <param name="args">The arguments.</param>
        public virtual void QueryList(IDbAccesser dba, ISqlSelectArgs args)
        {
            if (_hasLOB)
            {
                args.FormattedSql = this.ReplaceLOBColumns(args.FormattedSql);
            }

            var reader = dba.QueryDataReader(args.FormattedSql, args.Parameters);

            this.FillDataIntoList(
                reader, ReadDataType.ByName,
                args.List, args.FetchingFirst, args.PagingInfo, args.MarkTreeFullLoaded
                );
        }
Exemplo n.º 7
0
 /// <summary>
 /// 执行 Sql 并读取 DataReader 中的值到实体。
 /// </summary>
 /// <param name="dba">The dba.</param>
 /// <param name="args">The arguments.</param>
 /// <param name="readType">Type of the read.</param>
 /// <param name="sql">The SQL.</param>
 protected void QueryDataReader(IDbAccesser dba, IEntitySelectArgs args, ReadDataType readType, FormattedSql sql)
 {
     //查询数据库
     using (var reader = dba.QueryDataReader(sql, sql.Parameters))
     {
         //填充到列表中。
         this.FillDataIntoList(
             reader,
             readType,
             args.List,
             args.FetchingFirst,
             args.PagingInfo,
             args.MarkTreeFullLoaded
             );
     }
 }
Exemplo n.º 8
0
        public override void QueryList(IDbAccesser dba, IEntitySelectArgs args)
        {
            /*********************** 代码块解释 *********************************
             *
             * 以下代码用于支持数据库分页
             *
             **********************************************************************/

            //检查分页条件。(如果是树状实体,也不支持在数据库中进行分页。)
            var  pagingInfo = args.PagingInfo;
            bool isPaging   = !PagingInfo.IsNullOrEmpty(pagingInfo) &&
                              this.GetPagingLocation(pagingInfo) == PagingLocation.Database &&
                              !Repository.SupportTree;

            if (isPaging)
            {
                var query = args.Query;

                var autoSelection = AutoSelectionForLOB(query);

                //生成分页 Sql
                var generator = this.CreateSqlGenerator();
                generator.Generate(query as SqlSelect, pagingInfo);
                var pagingSql = generator.Sql;

                //查询数据库
                using (var reader = dba.QueryDataReader(pagingSql, pagingSql.Parameters))
                {
                    //填充到列表中。
                    this.FillDataIntoList(
                        reader, autoSelection ? ReadDataType.ByIndex : ReadDataType.ByName,
                        args.List, false, pagingInfo, args.MarkTreeFullLoaded
                        );
                }

                //最后,如果需要,则统计一下总行数。
                if (pagingInfo.IsNeedCount)
                {
                    pagingInfo.TotalCount = this.Count(dba, query);
                }
            }
            else
            {
                base.QueryList(dba, args);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 使用 IQuery 条件进行查询。
        /// 分页默认实现为使用内存进行分页。
        /// </summary>
        /// <param name="dba">The dba.</param>
        /// <param name="args">The arguments.</param>
        public virtual void QueryList(IDbAccesser dba, IEntitySelectArgs args)
        {
            var query = args.Query;

            var autoSelection = AutoSelectionForLOB(query);

            var generator = this.CreateSqlGenerator();

            QueryFactory.Instance.Generate(generator, query);
            var sql = generator.Sql;

            //查询数据库
            var reader = dba.QueryDataReader(sql, sql.Parameters);

            //填充到列表中。
            this.FillDataIntoList(
                reader, autoSelection ? ReadDataType.ByIndex : ReadDataType.ByName,
                args.List, args.FetchingFirst, args.PagingInfo, args.MarkTreeFullLoaded
                );
        }
Exemplo n.º 10
0
 /// <summary>
 /// 执行 Sql 并读取 DataReader 中的值到实体。
 /// </summary>
 /// <param name="dba">The dba.</param>
 /// <param name="args">The arguments.</param>
 /// <param name="readType">Type of the read.</param>
 /// <param name="sql">The SQL.</param>
 protected void QueryDataReader(IDbAccesser dba, IEntitySelectArgs args, ReadDataType readType, FormattedSql sql)
 {
     //查询数据库
     using (var reader = dba.QueryDataReader(sql, sql.Parameters))
     {
         //填充到列表中。
         this.FillDataIntoList(
             reader,
             readType,
             args.List,
             args.FetchingFirst,
             args.PagingInfo,
             args.MarkTreeFullLoaded
             );
     }
 }
Exemplo n.º 11
0
        /// <summary>
        /// 使用 Sql 进行查询。
        /// 分页默认实现为使用内存进行分页。
        /// </summary>
        /// <param name="dba">The dba.</param>
        /// <param name="args">The arguments.</param>
        public virtual void QueryTable(IDbAccesser dba, ITableQueryArgs args)
        {
            if (_hasLOB)
            {
                args.FormattedSql = this.ReplaceLOBColumns(args.FormattedSql);
            }

            using (var reader = dba.QueryDataReader(args.FormattedSql, args.Parameters))
            {
                var table = args.ResultTable;
                if (table.Columns.Count == 0)
                {
                    LiteDataTableAdapter.AddColumns(table, reader);
                }

                var columnsCount = table.Columns.Count;

                PagingHelper.MemoryPaging(reader, r =>
                {
                    var row = table.NewRow();
                    for (int i = 0; i < columnsCount; i++)
                    {
                        var value = reader[i];
                        if (value != DBNull.Value)
                        {
                            row[i] = value;
                        }
                    }
                    table.Rows.Add(row);
                }, args.PagingInfo);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// 使用 Sql 进行查询。
        /// 分页默认实现为使用内存进行分页。
        /// </summary>
        /// <param name="dba">The dba.</param>
        /// <param name="args">The arguments.</param>
        public virtual void QueryList(IDbAccesser dba, ISqlSelectArgs args)
        {
            if (_hasLOB)
            {
                args.FormattedSql = this.ReplaceLOBColumns(args.FormattedSql);
            }

            using (var reader = dba.QueryDataReader(args.FormattedSql, args.Parameters))
            {
                this.FillDataIntoList(
                    reader, ReadDataType.ByName,
                    args.List, args.FetchingFirst, args.PagingInfo, args.MarkTreeFullLoaded
                    );
            }
        }
Exemplo n.º 13
0
        public override void QueryList(IDbAccesser dba, IEntitySelectArgs args)
        {
            /*********************** 代码块解释 *********************************
             *
             * 以下代码用于支持数据库分页
             *
            **********************************************************************/

            //检查分页条件。(如果是树状实体,也不支持在数据库中进行分页。)
            var pagingInfo = args.PagingInfo;
            bool isPaging = !PagingInfo.IsNullOrEmpty(pagingInfo) &&
                this.GetPagingLocation(pagingInfo) == PagingLocation.Database &&
                !Repository.SupportTree;
            if (isPaging)
            {
                var query = args.Query;
                if (!(query as TableQuery).HasOrdered()) { throw new InvalidProgramException("分页查询的同时,必须指定排序属性。"); }

                var autoSelection = AutoSelectionForLOB(query);

                //生成分页 Sql
                var generator = this.CreateSqlGenerator();
                generator.Generate(query as SqlSelect, pagingInfo);
                var pagingSql = generator.Sql;

                //查询数据库
                using (var reader = dba.QueryDataReader(pagingSql, pagingSql.Parameters))
                {
                    //填充到列表中。
                    this.FillDataIntoList(
                        reader, autoSelection ? ReadDataType.ByIndex : ReadDataType.ByName,
                        args.List, false, pagingInfo, args.MarkTreeFullLoaded
                        );
                }

                //最后,如果需要,则统计一下总行数。
                if (pagingInfo.IsNeedCount)
                {
                    pagingInfo.TotalCount = this.Count(dba, query);
                }
            }
            else
            {
                base.QueryList(dba, args);
            }
        }
Exemplo n.º 14
0
        public override void QueryTable(IDbAccesser dba, ITableQueryArgs args)
        {
            var pagingInfo = args.PagingInfo;
            if (PagingInfo.IsNullOrEmpty(pagingInfo) || this.GetPagingLocation(pagingInfo) == PagingLocation.Memory)
            {
                base.QueryTable(dba, args);
            }
            else
            {
                //转换为分页查询 SQL
                var parts = ParsePagingSqlParts(args.FormattedSql);
                CreatePagingSql(ref parts, pagingInfo);

                //读取分页的数据
                var table = args.ResultTable;
                using (var reader = dba.QueryDataReader(parts.PagingSql, args.Parameters))
                {
                    LiteDataTableAdapter.Fill(table, reader);
                }

                QueryTotalCountIf(dba, pagingInfo, parts, args.Parameters);
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// 使用 IQuery 条件进行查询。
        /// 分页默认实现为使用内存进行分页。
        /// </summary>
        /// <param name="dba">The dba.</param>
        /// <param name="args">The arguments.</param>
        public virtual void QueryList(IDbAccesser dba, IEntitySelectArgs args)
        {
            var query = args.Query;

            var autoSelection = AutoSelectionForLOB(query);

            var generator = this.CreateSqlGenerator();
            QueryFactory.Instance.Generate(generator, query);
            var sql = generator.Sql;

            //查询数据库
            using (var reader = dba.QueryDataReader(sql, sql.Parameters))
            {
                //填充到列表中。
                this.FillDataIntoList(
                    reader, autoSelection ? ReadDataType.ByIndex : ReadDataType.ByName,
                    args.List, args.FetchingFirst, args.PagingInfo, args.MarkTreeFullLoaded
                    );
            }
        }