ASP.NET分页存储过程自定义用户控件(转)

 网上有很多分页存储过程,但是基本上都是提供一个单纯的存储过程,没有具体的怎样去实现。最近做一个项目用户的数数据相当大(一百万以上的数据),如果用.NET自带的分页基本上是跑不动了,不是提示超时就是死在那里。于是就想到用存储过程分页来实现,去网上逛了一大圈终于找了几个比较好的存储过程。接下去就开始做测试等等,最后就干脆把它做成用户控件算了,以后用直接拖到页面上,传几个属性进去就可以实现分页,免得每次都重复同样的code。

        经本人测试,对于Sqlserver的效率相当快,而对于Oracle的效率(按某个字段倒序排)不是很理想,如果不排序效率很理想,这点没有深入研究(Oracle为什么按倒序排速度很慢,在PL/SQL里也一样)。

 先发布SqlServer版的存储过程(网上下载):

ASP.NET分页存储过程自定义用户控件(转)CREATE PROCEDURE  GetRecordFromPage   
ASP.NET分页存储过程自定义用户控件(转)          @tblName            varchar(
255),                --   表名 
ASP.NET分页存储过程自定义用户控件(转)          @RetColumns         varchar(
1000= '*',         --   需要返回的列,默认为全部   
ASP.NET分页存储过程自定义用户控件(转)          @Orderfld           varchar(
255),                --   排序字段名   
ASP.NET分页存储过程自定义用户控件(转)          @PageSize           
int  =  10,                  --   页尺寸   
ASP.NET分页存储过程自定义用户控件(转)          @PageIndex          
int  =  1,                   --   页码   
ASP.NET分页存储过程自定义用户控件(转)          @IsCount            bit  
=  0,                   --   返回记录总数,   非   0   值则返回   
ASP.NET分页存储过程自定义用户控件(转)          @OrderType          varchar(
50)  =  'asc',       --   设置排序类型,   非   asc   值则降序   
ASP.NET分页存储过程自定义用户控件(转)          @strWhere           varchar(
1000)  =  ''         --   查询条件   (注意:   不要加   where)   
ASP.NET分页存储过程自定义用户控件(转)  AS
ASP.NET分页存储过程自定义用户控件(转)      
ASP.NET分页存储过程自定义用户控件(转)  declare   @strSQL       varchar(
1000)          --   主语句   
ASP.NET分页存储过程自定义用户控件(转)  declare   @strTmp       varchar(
300)           --   临时变量   
ASP.NET分页存储过程自定义用户控件(转)  declare   @strOrder     varchar(
400)           --   排序类型   
ASP.NET分页存储过程自定义用户控件(转)    
ASP.NET分页存储过程自定义用户控件(转)  
if  @IsCount  !=   0    --执行总数统计
ASP.NET分页存储过程自定义用户控件(转)  
ASP.NET分页存储过程自定义用户控件(转)    begin
ASP.NET分页存储过程自定义用户控件(转)      
if @strWhere != ''   
ASP.NET分页存储过程自定义用户控件(转)          
set   @strSQL   =   "select   count(*)   as   Total   from   ["   +   @tblName   +   "]  where " + @strWhere 
ASP.NET分页存储过程自定义用户控件(转)      
else
ASP.NET分页存储过程自定义用户控件(转)          
set   @strSQL   =   "select   count(*)   as   Total   from   ["   +   @tblName   +   "]"
ASP.NET分页存储过程自定义用户控件(转)    end
ASP.NET分页存储过程自定义用户控件(转)    
ASP.NET分页存储过程自定义用户控件(转)  
else                    --执行查询操作
ASP.NET分页存储过程自定义用户控件(转)  
ASP.NET分页存储过程自定义用户控件(转)  begin
ASP.NET分页存储过程自定义用户控件(转)            
ASP.NET分页存储过程自定义用户控件(转)    
if  @OrderType  !=   'asc'   
ASP.NET分页存储过程自定义用户控件(转)        begin   
ASP.NET分页存储过程自定义用户控件(转)                
set   @strTmp   =   "<(select   min"   
ASP.NET分页存储过程自定义用户控件(转)                
set   @strOrder   =   "   order   by   ["   +   @Orderfld   +"]   desc"   
ASP.NET分页存储过程自定义用户控件(转)        end   
ASP.NET分页存储过程自定义用户控件(转)    
else   
ASP.NET分页存储过程自定义用户控件(转)        begin   
ASP.NET分页存储过程自定义用户控件(转)                
set  @strTmp   =   ">(select   max"   
ASP.NET分页存储过程自定义用户控件(转)                
set  @strOrder   =   "   order   by   ["   +   @Orderfld   +"]   asc"   
ASP.NET分页存储过程自定义用户控件(转)        end   
ASP.NET分页存储过程自定义用户控件(转)        
ASP.NET分页存储过程自定义用户控件(转)    
set  @strSQL   =   "select   top   "   +   str(@PageSize)   +   "   " + @RetColumns + "    from   ["   
ASP.NET分页存储过程自定义用户控件(转)            
+   @tblName   +   "]   where   ["   +   @Orderfld   +   "]"   +   @strTmp   +   "(["   
ASP.NET分页存储过程自定义用户控件(转)            
+   @Orderfld   +   "])   from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   ["   
ASP.NET分页存储过程自定义用户控件(转)            
+   @Orderfld   +   "]   from   ["   +   @tblName   +   "]"   +   @strOrder   +   ")   as   tblTmp)"   
ASP.NET分页存储过程自定义用户控件(转)            
+   @strOrder   
ASP.NET分页存储过程自定义用户控件(转)        
ASP.NET分页存储过程自定义用户控件(转)    
if  @strWhere  !=   ''   
ASP.NET分页存储过程自定义用户控件(转)            
set   @strSQL   =   "select   top   "   +   str(@PageSize)   +   "   " + @RetColumns + "   from   ["   
ASP.NET分页存储过程自定义用户控件(转)                    
+   @tblName   +   "]   where   ["   +   @Orderfld   +   "]"   +   @strTmp   +   "(["   
ASP.NET分页存储过程自定义用户控件(转)                    
+   @Orderfld   +   "])   from   (select   top   "   +   str((@PageIndex-1)*@PageSize)   +   "   ["   
ASP.NET分页存储过程自定义用户控件(转)                    
+   @Orderfld   +   "]   from   ["   +   @tblName   +   "]   where   ("   +   @strWhere   +   ")   "   
ASP.NET分页存储过程自定义用户控件(转)                    
+   @strOrder   +   ")   as   tblTmp)   and   ("   +   @strWhere   +   ")   "   +   @strOrder   
ASP.NET分页存储过程自定义用户控件(转)        
ASP.NET分页存储过程自定义用户控件(转)    
if  @PageIndex   =   1   
ASP.NET分页存储过程自定义用户控件(转)        begin   
ASP.NET分页存储过程自定义用户控件(转)                
set   @strTmp   =   ""   
ASP.NET分页存储过程自定义用户控件(转)                
if   @strWhere   !=   ''   
ASP.NET分页存储过程自定义用户控件(转)                        
set   @strTmp   =   "   where   ("   +   @strWhere   +   ")"   
ASP.NET分页存储过程自定义用户控件(转)            
ASP.NET分页存储过程自定义用户控件(转)                
set   @strSQL   =   "select   top   "   +   str(@PageSize)   +   "   " + @RetColumns + "   from   ["          
ASP.NET分页存储过程自定义用户控件(转)                        
+   @tblName   +   "]"   +   @strTmp   +   "   "   +   @strOrder   
ASP.NET分页存储过程自定义用户控件(转)        end
ASP.NET分页存储过程自定义用户控件(转) end
ASP.NET分页存储过程自定义用户控件(转)    
ASP.NET分页存储过程自定义用户控件(转)exec  (@strSQL)

下面为用户控件前台html代码:

ASP.NET分页存储过程自定义用户控件(转)<%@ Control Language="c#" AutoEventWireup="false" Codebehind="GetPagerForSql.ascx.cs" Inherits="doHope.GetPagerForSql" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
ASP.NET分页存储过程自定义用户控件(转)
<asp:label id="Label2" runat="server" Font-Size="9pt"></asp:label><FONT face="宋体">&nbsp;</FONT></FONT><asp:label id="lbl_RecordCnt" runat="server" Font-Size="9pt"></asp:label><FONT face="宋体">&nbsp;</FONT><asp:label id="Label3" runat="server" Font-Size="9pt"></asp:label><FONT face="宋体">&nbsp;</FONT><asp:label id="Label4" runat="server" Font-Size="9pt" ForeColor="Black">|</asp:label><FONT face="宋体">&nbsp;</FONT><asp:linkbutton id="lkbFirst" runat="server" Font-Size="9pt" Enabled="False" ForeColor="Black" CommandArgument="First">首页</asp:linkbutton><FONT face="宋体">&nbsp;</FONT><asp:linkbutton id="lkbPre" runat="server" Font-Size="9pt" Enabled="False" ForeColor="Black" CommandArgument="Pre">上一页</asp:linkbutton><FONT face="宋体">&nbsp;</FONT><asp:linkbutton id="lkbNext" runat="server" Font-Size="9pt" Enabled="False" ForeColor="Black" CommandArgument="Next">下一页</asp:linkbutton><FONT face="宋体">&nbsp;</FONT><asp:linkbutton id="lkbLast" runat="server" Font-Size="9pt" Enabled="False" ForeColor="Black" CommandArgument="Last">末页</asp:linkbutton><FONT face="宋体">&nbsp;</FONT><asp:label id="Label5" runat="server" Font-Size="9pt" ForeColor="Black">|</asp:label><FONT face="宋体">&nbsp;</FONT><asp:label id="Label6" runat="server" Font-Size="9pt"></asp:label><asp:textbox id="txt_CurrentPage" runat="server" Enabled="False" Width="35px" Height="18px" AutoPostBack="True"></asp:textbox><FONT face="宋体"></FONT>
ASP.NET分页存储过程自定义用户控件(转)
<asp:label id="Label8" runat="server" Font-Size="9pt" ForeColor="Black">/</asp:label><FONT face="宋体">&nbsp;</FONT><asp:label id="lbl_PageCnt" runat="server" Font-Size="9pt"></asp:label><FONT face="宋体">&nbsp;</FONT><asp:label id="Label9" runat="server" Font-Size="9pt"></asp:label>
ASP.NET分页存储过程自定义用户控件(转)

下面为后台代码:

 

ASP.NET分页存储过程自定义用户控件(转)namespace doHope

相关文章: