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

来源:互联网 发布:prisma软件下载 编辑:程序博客网 时间:2024/04/30 12:37

      分页查询,每个项目里必不可少的,封装好的方法在网上也是很多的,不管是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);}}



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

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

1 0