分页查询,每个项目里必不可少的,封装好的方法在网上也是很多的,不管是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);
}
}
底层方法写好了,我们就可以调用了,发现这个方法效率不是很高,查询速度相对来说有些慢,程序员编码不是只讲究一个功能实现,还要讲究效率,这个效率问题可是我们必须要考虑的问题。
不过目前我还没有优化成功,优化完了再继续总结吧。