项目中不可缺少的分页查询方法

      分页查询,每个项目里必不可少的,封装好的方法在网上也是很多的,不管是B/S还是C/S项目,底层的方法写的都是大同小异的,所以为了提高效率,我们总是将最快的实现方法拿过来。

        因为公司之前项目比较紧,分页查询的功能也是最后才实现的,所以底层的方法直接找了一个现成的用,直接把现在重构,所以自己动手写了个分页查询的底层方法。

     此处只介绍底层的分页方法,客户端的代码不多做介绍。

     这里有两个方法,第二个方便可以说是第一个方法的扩展了。我用的数据库时Oracle数据库,SQLServer和他大同小异,读者自己理会。

     直接上代码:

 public static DataSet ExecuteDataset(String connectionString, CommandType  commandType,string commandText, int PageSize, int CurrentPageIndex)
        {
            DataSet DataSet;
            //打开Oracle数据连接
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                connection.Open();
                OracleCommand command=new OracleCommand ();
                bool flag = false; 
                PrepareCommand(command, connection, null, commandText, null);
                using (OracleDataAdapter adapter = new OracleDataAdapter(command))
                {
                    DataSet dataSet = new DataSet();
                    int startRecord = PageSize * (CurrentPageIndex - 1);
                    int maxRecords = PageSize;
                    adapter.Fill(dataSet, startRecord, maxRecords, "currentPage");
                    command.Parameters.Clear();
                    if (flag)
                    {
                        connection.Close();
                    }
                    DataSet = dataSet;
                }
            }
            return DataSet;
        }

        public static DataSet ExecuteDataset1(OracleConnection  connection, CommandType commandType, string commandText, int PageSize, int CurrentPageIndex, params OracleParameter[] commandParameters)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }
            OracleCommand command = new OracleCommand();
            bool flag = false;
            PrepareCommand(command, connection, null, commandText, commandParameters);
            using (OracleDataAdapter adapter = new OracleDataAdapter(command))
            {
                DataSet dataSet = new DataSet();
                int startRecord = PageSize * (CurrentPageIndex - 1);
                int maxRecords = PageSize;
                adapter.Fill(dataSet, startRecord, maxRecords, "currentPage");
                command.Parameters.Clear();
                if (flag)
                {
                    connection.Close();
                }
                return dataSet;
            }

        }
<pre name="code" class="csharp">private static void PrepareCommand(OracleCommand cmd,OracleConnection conn,OracleTransaction trans , string cmdText, OracleParameter[] cmdParms) 
		{
			if (conn.State != ConnectionState.Open) //如果是关闭状态则打开
				conn.Open();
			cmd.Connection = conn;
			cmd.CommandText = cmdText;
			if (trans != null)
				cmd.Transaction = trans;
			cmd.CommandType = CommandType.Text;//cmdType;
			if (cmdParms != null) 
			{
				foreach (OracleParameter parm in cmdParms)
					cmd.Parameters.Add(parm);
			}
		}


 

      底层方法写好了,我们就可以调用了,发现这个方法效率不是很高,查询速度相对来说有些慢,程序员编码不是只讲究一个功能实现,还要讲究效率,这个效率问题可是我们必须要考虑的问题。

      不过目前我还没有优化成功,优化完了再继续总结吧。

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值