.net中使用oracle数据库分页的土办法

近日公司一网站项目,要调用其它系统(call center系统)的oracle数据库数据,只能连接查询,无法创建存储过程,所以只能在sql语句上动脑筋实现分页:

/// <summary>
        /// Oracle通用分页查询函数 by 菩提树下的杨过 2010-01-07
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="fields">(要查询的)字段列表</param>
        /// <param name="sqlWhere">查询条件(不带where)</param>
        /// <param name="orderFields">排序字段</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="pageIndex">页索引</param>
        /// <param name="recordCount">(输出参数)记录总数</param>
        /// <param name="pageCount">(输出参数)分页总数</param>
        /// <returns></returns>
        public DataSet QueryOracle(string tableName, string fields, string sqlWhere, string orderFields, int pageSize, int pageIndex, out int recordCount, out int pageCount)
        {
            if (string.IsNullOrEmpty(sqlWhere)) { sqlWhere = "1=1"; }
            DataSet ds = null;
            EnLib.Database _db = null;
            recordCount = 0;
            pageCount = 0;
            try
            {
                _db = EnLib.DatabaseFactory.CreateDatabase();
                //先计算总记录数
                string sql = string.Format("select Count(*) from {0} where {1}", tableName, sqlWhere);
                recordCount = int.Parse(_db.ExecuteScalar(CommandType.Text, sql).ToString());

                //再确定总页数
                if (recordCount % pageSize == 0)
                {
                    pageCount = recordCount / pageSize;
                }
                else
                {
                    pageCount = recordCount / pageSize + 1;
                }

                if (pageIndex <= 0) { pageIndex = 1; }

                if (pageIndex > pageCount) { pageIndex = pageCount; }

                //确定起始点
                int _start = pageSize * (pageIndex - 1) + 1;

                int _end = _start + pageSize - 1;

                if (_end > recordCount) { _end = recordCount; }

                //如果fields为*,则查询所有字段列表
                if (fields == "*")
                {
                    sql = "select table_name,column_name from user_tab_columns where table_name='" + tableName.ToUpper().Trim() + "'";
                    IDataReader dr = _db.ExecuteReader(CommandType.Text, sql);
                    string _allFields = "";
                    while (dr.Read())
                    {
                        _allFields += dr[1] + ",";
                    }
                    dr.Close();
                    fields = _allFields.Trim(',');
                    if (orderFields.Length == 0) 
                    {
                        orderFields = fields.Split(',')[0];
                    }
                }

                if (orderFields.Length == 0)
                {
                    orderFields = fields.Split(',')[0];
                }

                //构造sql语句
                sql = string.Format("select RecordID,{0} from (select rownum RecordID,{0} from (select {0} from {1} where {2} order by {3})) where RecordID between {4} and {5}", fields, tableName, sqlWhere, orderFields, _start, _end);

                ds = _db.ExecuteDataSet(CommandType.Text, sql);
            }
            catch
            {

            }            

            return ds;
        }

 

   

注:用到了微软的企业库EnLib

时间: 2024-11-05 16:29:44

.net中使用oracle数据库分页的土办法的相关文章

oracle 分页查询-Oracle数据库分页查询

问题描述 Oracle数据库分页查询 分页查询语句.之前用java获取分页信息是分两步走的,首先获取想要得到的字段信息,第二部获取总记录数count(*).现在因为种种原因,就是想请教高手一下,能不能在一个sql中,查询出这些信息包括总记录数.比如 表 test 字段有id,name. select * from (select A.*,ROWNUM RN from(select * from test) A where ROWNUM<=11) where RN>=1; 这是分开写时,查询的语

plsql developer-如何访问另一台计算机中的oracle数据库

问题描述 如何访问另一台计算机中的oracle数据库 有两台笔记本,一个配置高一些,安装了Oracle数据库,另一台配置低一些,没有安装,该怎么配置可以使用plsql developer工具访问高配置电脑中的数据库呢?求大神解答,详细一点哈!本人有点笨,不胜感激! 解决方案 参考:http://blog.csdn.net/metal1/article/details/41799669http://www.jb51.net/article/48676.htm 解决方案二: 首先oracle数据库得

ASP高级技巧:在ASP中使用Oracle数据库

oracle|高级|技巧|数据|数据库 Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Obje

在ASP中使用Oracle数据库

Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Objects for OLE就是其中之一.Or

在ASP中使用Oracle数据库技巧(二)

如果已经真正地理解了我们在上面讨论的一些方法(Edit.Update和AddNew),也许有的读者已经知道该如何在Oracle数据库中删除记录了. <% '删除所有符合上面条件的记录  OraDynaset.Delete %> 在Oracle8i中搜索和更新数据记录的代码 1)搜索   <%          'RetriveRecProc.asp -使用ASP的Oracle Objects for OLE更新数据记录          %>        <%  '定义作为

在ASP中使用Oracle数据库技巧

Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建动态网页的功能强大的服务器端脚本语言.许多ASP开发人员一直在考虑,能否在开发互联网应用.电子商务网站.互联网管理系统时结合使用ASP和Oracle数据库?这个问题的答案是肯定的,我们还可以使用VB访问Oracle数据库.在本篇文章中,我们将主要讨论如何使用ASP来处理Oracle数据库中数据的方法. 在开始讨论这个问题前,我们需要了解几个背景知识,Oracle Objects for OLE就是其中之一.Or

求ASP.NET中实现ORACLE数据库自动恢复的代码

问题描述 求ASP.NET中实现ORACLE数据库自动恢复的代码,自动备份的好处理,可是还原的时候有表空间和用户等,请问哪位有解决办法? 解决方案 解决方案二:up

oracle数据库分页查询实例小结

Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用.   分页查询格式:  代码如下 复制代码 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21   其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40和RN >= 21控制分页查询的每页的

J2EE应用中与Oracle数据库的连接

j2ee|oracle|数据|数据库 在J2EE应用程序开发中,应用程序与数据库连接的建立是我们经常遇到的问题之一.在这里我主要谈谈在本地应用程序中通过OCI方式.thin方式和JdbcOdbc桥方式连接Oracle数据库,在iPlanet Application Server 6.5和Sun Java System Application Server 7中对Oracle数据库连接池的配置以及应用中如何从连接池中获得连接. 一.本地通过JDBC获得Oracle数据库连接 通过JDBC获得Ora