第一、首先在mysql中创建一个存储过程
BEGIN /* @selectSql VARCHAR(5000), --sql语句 @orderWhere VARCHAR(200), --排序条件 @pageSize int, -- 每页多少条记录 @pageIndex int = 1 , -- 指定当前为第几页 @TotalPage int output , -- 返回总页数 @totalCount int output -- 返回总记录数 */ SET @str=CONCAT("SET @tCount=(SELECT COUNT(1) FROM (",selectSql,") as t );"); PREPARE stmt1 FROM @str; EXECUTE stmt1; -- 总页数 SET @tPage=CEILING((@tCount+0.0)/PageSize); SET TotalCount=@tCount; SET TotalPage=@tPage; SET @str=CONCAT(selectSql," ",orderWhere," LIMIT ",(PageIndex-1)*PageSize,",",PageSize,";"); PREPARE stmt1 FROM @str; EXECUTE stmt1; END
二、c#代码:
public static DataSet GetExecuteCustomPageDataSetMySql(string selectSql,string orderwhere, int iPage_Size, int iPage_Index, out int iPageCount, out int iiRecord_Count) { DataSet ds = null; try { MySql.Data.MySqlClient.MySqlParameter[] param = new MySql.Data.MySqlClient.MySqlParameter[] { //IN selectSql varchar(4000),IN orderWhere varchar(200),IN PageSize int,IN PageIndex int,OUT TotalPage int,OUT TotalCount int new MySql.Data.MySqlClient.MySqlParameter("?selectSql",selectSql), new MySql.Data.MySqlClient.MySqlParameter("?orderWhere",orderwhere), new MySql.Data.MySqlClient.MySqlParameter("?pageSize",iPage_Size), new MySql.Data.MySqlClient.MySqlParameter("?pageIndex",iPage_Index), new MySql.Data.MySqlClient.MySqlParameter("?TotalPage", MySql.Data.MySqlClient.MySqlDbType.Int32), new MySql.Data.MySqlClient.MySqlParameter("?TotalCount", MySql.Data.MySqlClient.MySqlDbType.Int32) }; param[4].Direction = System.Data.ParameterDirection.Output; param[5].Direction = System.Data.ParameterDirection.Output; //cmd.CommandText = "up_ProcCustomPage2005"; //string sql="select * FROM Cabin order by AddTime desc LIMIT 0,20;"; iPageCount = 0; iiRecord_Count = 0; ds = MySqlHelper.ExecuteDataset(MySqlHelper.ConnectionString, CommandType.StoredProcedure, "proc_page", param); try { iPageCount = Convert.ToInt32(param[4].Value); iiRecord_Count = Convert.ToInt32(param[5].Value); } catch (Exception ex) { iPageCount = 0; iiRecord_Count = 0; throw; } finally { //param.cl.Clear(); } } catch (Exception e) { ds = null; iPageCount = 0; iiRecord_Count = 0; throw; } finally { //cnn.Close(); //cnn.Dispose(); } return ds; }
三、引用例子
public DataSet GetPurchaserSalesVolumeAnalysis(string where, string sFilter_Condition, int iPage_Size, int iPage_Index, string sTaxisField, int iTaxis_Sign, out int iPageCount, out int iiRecord_Count) { string sql = @"select DISTINCT NewT.ptPaymentDate FlightOrderSub NewT "; string orderwhere = " ORDER BY NewT.ptPaymentDate "; return BaitourDAO.Common.DBHelper.GetExecuteCustomPageDataSetMySql( sql , orderwhere , iPage_Size , iPage_Index , out iPageCount , out iiRecord_Count); }