第一、首先在sqlserver中创建一个存储过程
      
        USE [BZY]
GO
      
      
        /*
      
      
        ***** 对象:  StoredProcedure [dbo].[up_ProcCustomPage2005_New]    脚本日期: 12/24/2013 11:17:03 *****
      
      
        */
      
      
        
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
      
      -- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
      
        
CREATE PROCEDURE [dbo].[up_ProcCustomPage2005_New]
@SelectSql varchar(
      
      
        4000
      
      
        )
,@OrderBy varchar(
      
      
        4000
      
      
        )
,@PageSize 
      
      
        int
      
      
        
,@PageIndex 
      
      
        int
      
      
        
,@PageCount 
      
      
        int
      
      
         output
,@RecordCount 
      
      
        int
      
      
         output
AS
      
      --SET @SelectSql = 
      
        '
      
      
        select * from table_3
      
      
        '
      
      
--SET @OrderBy = 
      
        '
      
      
        order by id desc
      
      
        '
      
      
        
Declare @sql nvarchar(
      
      
        4000
      
      
        )
SET @sql 
      
      = 
      
        '
      
      
        select @RecourdCount = count(*) from (
      
      
        '
      
       + @SelectSql + 
      
        '
      
      
        ) as tt@#$
      
      
        '
      
      
        
EXEC sp_executesql @sql,N
      
      
        '
      
      
        @RecourdCount int OUTPUT
      
      
        '
      
      
        ,@RecordCount OUTPUT
SET @PageCount 
      
      = CEILING( (@RecordCount + 
      
        0.0
      
      ) /
      
         @PageSize)
IF @PageIndex 
      
      >
      
         @PageCount
    SET @PageIndex 
      
      =
      
         @PageCount
    
IF @PageIndex 
      
      < 
      
        1
      
      
        
    SET @PageIndex 
      
      = 
      
        1
      
      
        
DECLARE @StartIndex 
      
      
        int
      
      
        
DECLARE @EndIndex 
      
      
        int
      
      
        
SET @StartIndex 
      
      = (@PageIndex-
      
        1
      
      ) * @PageSize + 
      
        1
      
      
        
SET @EndIndex 
      
      = @PageIndex *
      
         @PageSize
    
SET @sql 
      
      = 
      
        '
      
      
        select * from (select row_number()over(
      
      
        '
      
       + @OrderBy + 
      
        '
      
      
        ) as rownumber,*  from (
      
      
        '
      
       + @SelectSql + 
      
        '
      
      
        ) AS tt@#$) as tt@#$result where rownumber between 
      
      
        '
      
       + cast(@StartIndex AS varchar) + 
      
        '
      
      
         and 
      
      
        '
      
       +
      
         cast(@EndIndex AS varchar) 
PRINT @sql    
EXEC sp_executesql @sql
      
    
  二、c#代码:
      
        private
      
      
        static
      
       DataTable GetExecuteCustomPage_New(
      
        string
      
       selectSql, 
      
        string
      
       orderBy, 
      
        int
      
       pageSize, 
      
        int
      
       pageIndex, 
      
        out
      
      
        int
      
       pageCount, 
      
        out
      
      
        int
      
      
         recordCount) 
        {
            MatchCollection mc 
      
      = Regex.Matches(orderBy, 
      
        @"
      
      
        ([^ ]*)\.[^ ]*
      
      
        "
      
      
        );
            
      
      
        if
      
       (mc.Count > 
      
        0
      
      
        )
            {
                
      
      
        foreach
      
       (Match item 
      
        in
      
      
         mc)
                {                    
                    orderBy 
      
      = orderBy.Replace(item.Groups[
      
        1
      
      ].Value + 
      
        "
      
      
        .
      
      
        "
      
      , 
      
        ""
      
      
        );
                }
            }           
            SqlParameter SelectSql 
      
      = 
      
        new
      
       SqlParameter() { ParameterName = 
      
        "
      
      
        @SelectSql
      
      
        "
      
      , Size = 
      
        4000
      
      , Value =
      
         selectSql };
            SqlParameter OrderBy 
      
      = 
      
        new
      
       SqlParameter() { ParameterName = 
      
        "
      
      
        @OrderBy
      
      
        "
      
      , Size = 
      
        4000
      
      , Value =
      
         orderBy };
            SqlParameter PageSize 
      
      = 
      
        new
      
       SqlParameter() { ParameterName = 
      
        "
      
      
        @PageSize
      
      
        "
      
      , Size = 
      
        4
      
      , Value = pageSize , DbType =
      
         DbType.Int32 };
            SqlParameter PageIndex 
      
      = 
      
        new
      
       SqlParameter() { ParameterName = 
      
        "
      
      
        @PageIndex
      
      
        "
      
      , Size = 
      
        4
      
      , Value = pageIndex , DbType =
      
         DbType.Int32 };
            SqlParameter PageCount 
      
      = 
      
        new
      
       SqlParameter() { ParameterName = 
      
        "
      
      
        @PageCount
      
      
        "
      
      , Size = 
      
        4
      
      , Direction = ParameterDirection.Output , DbType =
      
         DbType.Int32 };
            SqlParameter RecordCount 
      
      = 
      
        new
      
       SqlParameter() { ParameterName = 
      
        "
      
      
        @RecordCount
      
      
        "
      
      , Size = 
      
        4
      
      , Direction = ParameterDirection.Output , DbType =
      
         DbType.Int32 };
            DataSet ds 
      
      = 
      
        new
      
      
         DataSet();
        
            
      
      
        using
      
       (SqlConnection cnn = 
      
        new
      
       SqlConnection(ConfigurationManager.ConnectionStrings[
      
        "
      
      
        DBConfig
      
      
        "
      
      
        ].ToString())) 
            {
                SqlCommand cmd 
      
      =
      
         cnn.CreateCommand();
                cmd.CommandText 
      
      = 
      
        "
      
      
        up_ProcCustomPage2005_New
      
      
        "
      
      
        ;
                cmd.CommandType 
      
      =
      
         CommandType.StoredProcedure;
                cmd.Connection 
      
      =
      
         cnn;
                cmd.Parameters.Add(SelectSql);
                cmd.Parameters.Add(OrderBy);
                cmd.Parameters.Add(PageSize);
                cmd.Parameters.Add(PageIndex);
                cmd.Parameters.Add(PageCount);
                cmd.Parameters.Add(RecordCount);
                SqlDataAdapter sda 
      
      = 
      
        new
      
      
         SqlDataAdapter(cmd);
                cnn.Open();
                sda.Fill(ds);
                pageCount 
      
      =
      
         Convert.ToInt32(PageCount.Value);
                recordCount 
      
      =
      
         Convert.ToInt32(RecordCount.Value);
            }
            
      
      
        return
      
       ds.Tables[
      
        0
      
      
        ];
        }
      
    
  三、引用例子
      
        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 NewT.ptPaymentDate,NewT.fsStatus from
      
      
        Student 
      
      
        NewT ";
      
      
        string
      
       orderwhere = 
      
        "
      
      
         ORDER BY NewT.ptPaymentDate 
      
      
        "
      
      
        ;
            
      
      
        return
      
      
         BaitourDAO.Common.DBHelper.GetExecuteCustomPage_New(
                                  sql
                                  , orderwhere
                                  , iPage_Size
                                  , iPage_Index
                                  , 
      
      
        out
      
      
         iPageCount
                                  , 
      
      
        out
      
      
         iiRecord_Count);
        }
      
    
  

