通用分页SQL

None.gif SET  QUOTED_IDENTIFIER  ON  
None.gif
GO
None.gif
SET  ANSI_NULLS  ON  
None.gif
GO
None.gif
None.gif
CREATE     PROCEDURE  Paging_Asc_Desc
None.gif@Tables 
varchar ( 1000 ),
None.gif@PK 
varchar ( 100 ),
None.gif@Sort 
varchar ( 200 =   NULL ,
None.gif@PageNumber 
int   =   1 ,
None.gif@PageSize 
int   =   10 ,
None.gif@Fields 
varchar ( 1000 =   ' * ' ,
None.gif@Filter 
varchar ( 1000 =   NULL ,
None.gif@Group 
varchar ( 1000 =   NULL ,
None.gif@isCount 
bit   =   0   -- 1时返回记录条数
None.gif
AS
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*Find the @PK type*/
None.gif
DECLARE  @PKTable  varchar ( 100 )
None.gif
DECLARE  @PKName  varchar ( 100 )
None.gif
DECLARE  @type  varchar ( 100 )
None.gif
DECLARE  @prec  int
None.gif
None.gif
IF   CHARINDEX ( ' . ' , @PK)  >   0
None.gif    
BEGIN
None.gif        
SET  @PKTable  =   SUBSTRING (@PK,  0 CHARINDEX ( ' . ' ,@PK))
None.gif        
SET  @PKName  =   SUBSTRING (@PK,  CHARINDEX ( ' . ' ,@PK)  +   1 LEN (@PK))
None.gif    
END
None.gif
ELSE
None.gif    
BEGIN
None.gif        
SET  @PKTable  =  @Tables
None.gif        
SET  @PKName  =  @PK
None.gif    
END
None.gif
None.gif
SELECT  @type = t.name, @prec = c.prec
None.gif
FROM  sysobjects o 
None.gif
JOIN  syscolumns c  on  o.id = c.id
None.gif
JOIN  systypes t  on  c.xusertype = t.xusertype
None.gif
WHERE  o.name  =  @PKTable  AND  c.name  =  @PKName
None.gif
None.gif
IF   CHARINDEX ( ' char ' , @type)  >   0
None.gif   
SET  @type  =  @type  +   ' ( '   +   CAST (@prec  AS   varchar +   ' ) '
None.gif
None.gif
DECLARE  @strPageSize  varchar ( 50 )
None.gif
DECLARE  @strRows  varchar ( 50 )
None.gif
DECLARE  @strFilter  varchar ( 8000 )
None.gif
DECLARE  @strGroup  varchar ( 8000 )
None.gif
DECLARE  @strSortColumn  varchar ( 4000 )
None.gif
DECLARE  @strSortDesc  varchar ( 4000 )
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*Default Sorting*/
None.gif
IF  @Sort  IS   NULL
None.gif    
SET  @Sort  =  @PK
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*Set sorting variables.*/     
None.gif
IF   CHARINDEX ( ' DESC ' ,@Sort) > 0
None.gif    
BEGIN
None.gif        
SET  @strSortDesc  =   REPLACE (@Sort,  ' DESC ' ' ASC ' )
None.gif        
SET  @strSortColumn  =   ' '   +   REPLACE (@Sort,  ' DESC ' '' )
None.gif    
END
None.gif
ELSE
None.gif    
BEGIN
None.gif        
IF   CHARINDEX ( ' ASC ' , @Sort)  =   0
None.gif            
BEGIN
None.gif                
SET  @strSortDesc  =  @Sort  +   '  DESC '
None.gif                
SET  @strSortColumn  =   ' '   +  @Sort
None.gif            
END
None.gif        
ELSE
None.gif            
BEGIN
None.gif                
SET  @strSortDesc  =   REPLACE (@Sort,  ' ASC ' ' DESC ' )
None.gif                
SET  @strSortColumn  =   ' '   +   REPLACE (@Sort,  ' ASC ' '' )
None.gif            
END
None.gif    
END
None.gif
IF  @Sort  =  @PK
None.gif    
SET  @strSortColumn  =   ''
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*Default Page Number*/
None.gif
IF  @PageNumber  <   1
None.gif    
SET  @PageNumber  =   1
None.gif    
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*Set paging variables.*/
None.gif
SET  @strPageSize  =   CONVERT ( varchar ( 50 ), @PageSize)
None.gif
SET  @strRows  =   CONVERT ( varchar ( 50 ), (@PageSize  *  (@PageNumber  -   1 +  @PageSize))
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*Set filter & group variables.*/
None.gif
IF  @Filter  IS   NOT   NULL   AND  @Filter  !=   ''
None.gif    
BEGIN
None.gif        
SET  @strFilter  =   '  WHERE  '   +  @Filter  +   '   '
None.gif    
END
None.gif
ELSE
None.gif    
BEGIN
None.gif        
SET  @strFilter  =   ''
None.gif    
END
None.gif
IF  @Group  IS   NOT   NULL   AND  @Group  !=   ''
None.gif    
SET  @strGroup  =   '  GROUP BY  '   +  @Group  +   '   '
None.gif
ELSE
None.gif    
SET  @strGroup  =   ''
None.gif
None.gif
if  @isCount  =   1
None.gif    
begin
None.gif        
EXEC ( ' SELECT  Count(*) FROM  '   +  @Tables  +  @strFilter  +   '   '   +  @strGroup )
None.gif    
end
None.gif
else
None.gif    
begin
ExpandedBlockStart.gifContractedBlock.gif    
/**/ /*Execute dynamic query*/     
None.gif    
EXEC (
None.gif    
' DECLARE @tblPK TABLE (
None.gif                PK  
'   +  @type  +   '  NOT NULL PRIMARY KEY
None.gif                )
None.gif    
None.gif    INSERT INTO @tblPK SELECT TOP 
'   +  @strPageSize  +   '   '   +  @PK  +   '  FROM (SELECT TOP  '   +  @strRows  +   '   '   +  @PK  +  @strSortColumn  +   '  FROM  '   +  @Tables  +  @strFilter  +   '   '   +  @strGroup  +   '  ORDER BY  '   +  @Sort  +   ' ) AS  '   +  @PKTable  +   '  ORDER BY  '   +  @strSortDesc  +   '
None.gif    
None.gif    SELECT 
'   +  @Fields  +   '  FROM  '   +  @Tables  +   '  JOIN @tblPK tblPK ON  '   +  @PK  +   '  = tblPK.PK  '   +  @strFilter  +   '   '   +  @strGroup  +   '  ORDER BY  '   +  @Sort
None.gif    )
None.gif    
end
None.gif
None.gif
None.gif
None.gif
None.gif
GO
None.gif
SET  QUOTED_IDENTIFIER  OFF  
None.gif
GO
None.gif
SET  ANSI_NULLS  ON  
None.gif
GO
None.gif
None.gif
简单测试代码
None.gif using  System;
None.gif
using  System.Collections;
None.gif
using  System.ComponentModel;
None.gif
using  System.Data;
None.gif
using  System.Drawing;
None.gif
using  System.Web;
None.gif
using  System.Web.SessionState;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
using  System.Web.UI.HtmlControls;
None.gif
using  System.Data.SqlClient;
None.gif
using  Microsoft.ApplicationBlocks.Data;
None.gif
None.gif
namespace  PagingWebTest
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// Summary description for WebForm1.
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public class WebForm1 : System.Web.UI.Page
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
protected System.Web.UI.WebControls.DataGrid DataGrid1;
InBlock.gif
InBlock.gif        
//Connection string
InBlock.gif
        string conStr = "Server=Localhost;Uid=sa;Pwd=;Database=test";
InBlock.gif
InBlock.gif        
string spName = "Paging_Asc_Desc";
InBlock.gif        
string Tables = "LargeTable";
InBlock.gif        
string PK = "LargeTable.PK";
InBlock.gif        
int PageNumber = 1;
InBlock.gif        
int PageSize = 10;
InBlock.gif        
string Fields = "*";
InBlock.gif        
string Filter = "";
InBlock.gif        
string Group = "";
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// Property Sort (string)
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public string Sort
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if ((string)this.ViewState["Sort"]=="")
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return "LargeTable.PK";
ExpandedSubBlockEnd.gif                }

InBlock.gif                
return (string)this.ViewState["Sort"];
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
this.ViewState["Sort"= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif    
InBlock.gif        
private void Page_Load(object sender, System.EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
// This is the key line for custom paging, DataGrid will automatically calculate everything, it just needs the total number of pages
ExpandedSubBlockStart.gifContractedSubBlock.gif
            DataGrid1.VirtualItemCount = (int)SqlHelper.ExecuteScalar(conStr, spName, new object[]dot.gif{Tables, PK, ""00"", Filter, Group,1});
InBlock.gif
InBlock.gif            
//Bind Grid the first time
InBlock.gif
            if(!Page.IsPostBack)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                BindGrid(PageNumber);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif        
Web Form Designer generated code#region Web Form Designer generated code
InBlock.gif        
override protected void OnInit(EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//
InBlock.gif            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
InBlock.gif            
//
InBlock.gif
            InitializeComponent();
InBlock.gif            
base.OnInit(e);
ExpandedSubBlockEnd.gif        }

InBlock.gif        
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// Required method for Designer support - do not modify
InBlock.gif        
/// the contents of this method with the code editor.
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        private void InitializeComponent()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{    
InBlock.gif            
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
InBlock.gif            
this.DataGrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);
InBlock.gif            
this.Load += new System.EventHandler(this.Page_Load);
InBlock.gif
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
InBlock.gif        
//DataBinding
InBlock.gif
        private void BindGrid(int pageNumber)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            SqlDataReader dr 
= null;
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif                dr 
= SqlHelper.ExecuteReader(conStr, spName, new object[]dot.gif{Tables, PK, Sort, pageNumber, PageSize, Fields, Filter, Group,0});
InBlock.gif                DataGrid1.DataSource 
= dr;
InBlock.gif                DataGrid1.DataBind();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
throw(ex);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (dr!=null) dr.Close();
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
//Handle Paging
InBlock.gif
        private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            DataGrid1.CurrentPageIndex 
= e.NewPageIndex;
InBlock.gif            
if(e.NewPageIndex+1 >= DataGrid1.PageCount)
InBlock.gif                BindGrid(DataGrid1.CurrentPageIndex);
InBlock.gif            
else
InBlock.gif                BindGrid(DataGrid1.CurrentPageIndex
+1);
InBlock.gif        
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
//Handle Sorting
InBlock.gif
        private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.Sort = e.SortExpression;
InBlock.gif            BindGrid(DataGrid1.CurrentPageIndex);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值