第一、首先在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);
        }

 

posted on 2013-12-24 11:25  王洪洪  阅读(1161)  评论(0编辑  收藏  举报