通用SQL存储过程分页以及asp.net后台调用

数据库 SQL Server
创建表格并添加300万数据

 创建表格并添加300万数据

  1. use Stored 
  2. CREATE TABLE UserInfo(  --创建表 
  3. id int  IDENTITY(1,1) PRIMARY KEY not null,--添加主键和标识列 
  4. UserName varchar(50)  
  5.   
  6. declare @i int  --添加3百万数据,大概4分钟时间 
  7. set @i=1 
  8. while @i<3000000 
  9. begin 
  10. insert into UserInfo (UserName) values(@i) 
  11. set @i=@i+1 
  12. end 

存储过程T-SQL

  1. USE [Stored] 
  2. GO 
  3. /****** Object:  StoredProcedure [dbo].[GetDataList]    Script Date: 08/17/2015 16:40:21 ******/ 
  4. SET ANSI_NULLS ON 
  5. GO 
  6. SET QUOTED_IDENTIFIER ON 
  7. GO 
  8. ALTER  PROCEDURE [dbo].[GetDataList] 
  9.  @TableName  varchar(5000),       --表名 
  10.  @Fields varchar(5000) = '*',     --字段名(全部字段为*) 
  11.  @OrderField varchar(5000),       --排序字段(必须!支持多字段) 
  12.  @OrderType varchar(5000),        --排序类型 
  13.  @sqlWhere varchar(5000) = Null,  --条件语句(不用加where) 
  14.  @pageSize int,                   --每页多少条记录 
  15.  @pageIndex int = 1 ,             --指定当前为第几页 
  16.  @TotalPage int output,           --返回总页数  
  17.  @totalRecord int output       --计算总记录数              --返回总记录数 
  18.  ) 
  19. as 
  20. begin    Begin Tran --开始事务    Declare @sql nvarchar(4000); 
  21.      
  22.     Declare   @sql nvarchar(500)=''   
  23.     if (@SqlWhere='' or @sqlWhere=NULL
  24.         set @sql = 'select @totalRecord = count(*) from ' + @TableName 
  25.     else 
  26.         set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere    
  27.            EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数   
  28.                  
  29.      
  30.     --计算总页数 
  31.     select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)    if (@SqlWhere='' or @sqlWhere=NULL
  32.         set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField +' ' + @Ordertype+' ) as rowId,' + @Fields + ' from ' + @TableName  
  33.     else 
  34.         set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField +' ' + @Ordertype+'  ) as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere     
  35.  
  36. --处理页数超出范围情况 
  37.     if @PageIndex<=0  
  38.         Set @pageIndex = 1 
  39.      
  40.     if @pageIndex>@TotalPage 
  41.         Set @pageIndex = @TotalPage     --处理开始点和结束点 
  42.     Declare @StartRecord int 
  43.     Declare @EndRecord int 
  44.      
  45.     set @StartRecord = (@pageIndex-1)*@PageSize + 1 
  46.     set @EndRecord = @StartRecord + @pageSize - 1    --继续合成sql语句 
  47.     set @Sql = @Sql + ') as ' + @TableName + ' where rowid between ' + Convert(varchar(50),@StartRecord) + ' and ' +  Convert(varchar(50),@EndRecord)  
  48.     --print @Sql   
  49.      
  50.      Exec(@Sql) 
  51.     --------------------------------------------------- 
  52.     If @@Error <> 0 
  53.       Begin 
  54.         RollBack Tran 
  55.         Return -1 
  56.       End 
  57.      Else 
  58.       Begin 
  59.         Commit Tran 
  60.         Return @totalRecord ---返回记录总数 
  61.       End     
  62. end 
  63.  
  64. --exec GetDataList 'Userinfo','*','id','desc','',10,1,3,3000000 

前台页面Default2.aspx

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml"
  6. <head runat="server"
  7.     <title></title> 
  8. </head> 
  9. <body> 
  10.     <form id="form1" runat="server"
  11.     <div> 
  12.      <asp:GridView ID="GridView1" runat="server"
  13.         </asp:GridView> 
  14.        <asp:Label ID="lbl_page" runat="server" Text="Label"></asp:Label> 
  15.     </div> 
  16.     </form> 
  17. </body> 
  18. </html> 

后台CS代码Default2.aspx.cs

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Web; 
  5. using System.Web.UI; 
  6. using System.Web.UI.WebControls; 
  7. using System.Data; 
  8. using System.Data.SqlClient; 
  9. using System.Configuration; 
  10. using System.Text; 
  11.  
  12.  
  13. public partial class Default2 : System.Web.UI.Page 
  14. {    
  15.     private int PageIndex = 0;//当前页码 
  16.     private int PageSize = 50;//每页几条记录 
  17.     private int TotalPage = 1;//总分页数 
  18.     private int TotalRecord = 0;//总记录 
  19.     private string OrderType = " desc";//排序方式 默认正序 
  20.     protected void Page_Load(object sender, EventArgs e) 
  21.     { 
  22.         if (!IsPostBack) 
  23.         { 
  24.             GetParams(); 
  25.             DataSet ds = PageData("UserInfo""*""id", OrderType, "", PageSize, PageIndex, out TotalPage, out TotalRecord); 
  26.             GridView1.DataSource = ds; 
  27.             GridView1.DataBind(); 
  28.             lbl_page.Text = GetDivPager("", ds); 
  29.         } 
  30.     } 
  31.  
  32.     //数据库连接字符 
  33.     public static string StrConn() 
  34.     { 
  35.         //return string.Format("{0}","server=.;database=Stored;user=sa;password=123456"); 
  36.         return ConfigurationSettings.AppSettings["ConnString"].ToString(); 
  37.     } 
  38.     //Get方式获得下一页 
  39.     private void GetParams() 
  40.     { 
  41.         if (!String.IsNullOrEmpty(Request["page"])) 
  42.         { 
  43.             PageIndex = Convert.ToInt32(Request["Page"]); 
  44.         } 
  45.         else 
  46.         { 
  47.             PageIndex = 1; 
  48.         } 
  49.     } 
  50.     #region 获得分页字符 
  51.     public string GetDivPager(string queryString, DataSet ds) 
  52.     { 
  53.         StringBuilder sp = new StringBuilder(); 
  54.         int TotalCount = TotalRecord; 
  55.         int rowCount = TotalPage; 
  56.         if (ds != null
  57.         { 
  58.             sp.AppendFormat("  <p>总记录:<span id=\"sum\">{0}</span>", TotalCount); 
  59.             sp.AppendFormat("  页码:<em><b id=\"current\">{0}</b>/<span id=\"count\">{1}</span></em> ", PageIndex, rowCount); 
  60.             sp.AppendFormat("  每页:<span id=\"eachPage\">{0}</span></p> ", PageSize); 
  61.              
  62.             sp.AppendFormat("  <a  href='{0}'>首页</a> ""?page=1" + queryString); 
  63.             if (PageIndex > 1) 
  64.             { 
  65.                 sp.AppendFormat("  <a href='{0}'>< 上一页 </a>""?page=" + (PageIndex - 1) + queryString); 
  66.             } 
  67.             int temp = 0; 
  68.             int loopc = rowCount > 10 ? 10 : rowCount; 
  69.             for (int i = 0; i < loopc; i++) 
  70.             { 
  71.                 temp = i + 1; 
  72.                 if (PageIndex > 10) { temp = (PageIndex - 10) + i + 1; } 
  73.                 sp.AppendFormat("  <a class=\"{0}\" href='{1}'>{2}</a>", PageIndex == temp ? "active" : """?page=" + temp + queryString, temp); 
  74.             } 
  75.             if (PageIndex != rowCount) 
  76.             { 
  77.                 sp.AppendFormat("  <a href='{0}'>下一页 ></a>""?page=" + (PageIndex + 1) + queryString); 
  78.             } 
  79.             sp.AppendFormat("  <a href='{0}'>尾页</a>""?page=" + rowCount + queryString); 
  80.            
  81.         } 
  82.         else 
  83.         { 
  84.             ds = null
  85.         } 
  86.         return sp.ToString(); 
  87.     } 
  88.     #endregion 
  89.     #region 获取分页的数据 
  90.     /// <summary> 
  91.     /// 获取分页的数据 
  92.     /// </summary> 
  93.     /// <param name="TblName">数据表名</param> 
  94.     /// <param name="Fields">要读取的字段</param> 
  95.     /// <param name="OrderField">排序字段</param> 
  96.     /// <param name="OrderType">排序方式</param> 
  97.     /// <param name="SqlWhere">查询条件</param> 
  98.     /// <param name="PageSize">每页显示多少条数据</param> 
  99.     /// <param name="pageIndex">当前页码</param> 
  100.     /// <param name="TotalPage">返回值,共有多少页</param> 
  101.     /// <param name="TotalRecord">返回值,总有多少条记录</param> 
  102.     /// <returns></returns
  103.     public static DataSet PageData(string TblName, string Fields, string OrderField, string OrderType, string SqlWhere, int PageSize, int pageIndex, out int TotalPage, out int TotalRecord) 
  104.     { 
  105.  
  106.         SqlConnection conn = new SqlConnection(StrConn()); 
  107.         SqlCommand comm = new SqlCommand("GetDataList", conn); 
  108.  
  109.         comm.Parameters.Add(new SqlParameter("@TableName", SqlDbType.NVarChar, 100)).Value = TblName; 
  110.         comm.Parameters.Add(new SqlParameter("@Fields", SqlDbType.NVarChar, 1000)).Value = Fields; 
  111.         comm.Parameters.Add(new SqlParameter("@OrderField", SqlDbType.NVarChar, 1000)).Value = OrderField; 
  112.         comm.Parameters.Add(new SqlParameter("@OrderType", SqlDbType.NVarChar, 1000)).Value = OrderType; 
  113.         comm.Parameters.Add(new SqlParameter("@sqlWhere", SqlDbType.NVarChar, 1000)).Value = SqlWhere; 
  114.         comm.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int)).Value = PageSize; 
  115.         comm.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int)).Value = pageIndex; 
  116.         comm.Parameters.Add(new SqlParameter("@TotalPage", SqlDbType.Int)); 
  117.  
  118.         comm.Parameters["@TotalPage"].Direction = ParameterDirection.Output;//获得out出来的参数值 
  119.  
  120.         comm.Parameters.Add(new SqlParameter("@totalRecord", SqlDbType.Int)); 
  121.         comm.Parameters["@totalRecord"].Direction = ParameterDirection.Output
  122.  
  123.         comm.CommandType = CommandType.StoredProcedure; 
  124.  
  125.         SqlDataAdapter dataAdapter = new SqlDataAdapter(comm); 
  126.         DataSet ds = new DataSet(); 
  127.         dataAdapter.Fill(ds); 
  128.  
  129.         TotalPage = (int)comm.Parameters["@TotalPage"].Value; 
  130.         TotalRecord = (int)comm.Parameters["@totalRecord"].Value; 
  131.  
  132.         conn.Close(); 
  133.         conn.Dispose(); 
  134.         comm.Dispose(); 
  135.          
  136.         return ds; 
  137.     } 
  138.     #endregion 

 

责任编辑:honglu 来源: 博客园
相关推荐

2012-04-23 15:10:18

ASP.NET

2011-04-29 13:23:11

分页数据存储

2009-07-27 14:33:51

ASP.NET调用存储

2009-07-27 14:41:33

ASP.NET调用存储

2009-11-06 09:23:41

ASP.NET高效分页

2009-03-11 11:46:11

JSPASP.NET存储过程

2011-06-17 17:37:16

JavaSQL Server

2010-03-19 09:17:16

ASP.NET MVC

2009-07-28 11:23:04

Excel导入SQL

2009-07-27 17:54:39

WCF服务ASP.NET

2010-11-10 15:16:14

Sql Server分

2010-01-22 16:48:54

VB.NET调用SQL

2012-04-13 10:05:24

ASP.NET

2009-07-22 16:02:39

ASP.NET MVCPagedList

2009-07-28 14:47:18

ASP.NET MVC

2009-07-24 09:02:24

ASP.Net RSA

2009-07-20 13:14:25

安装ASP.NET A

2011-08-16 16:59:58

PLSQL分页存储过程Java

2011-09-01 13:43:23

VC调用SQL Ser

2011-03-24 13:31:35

2分法存储过程分页
点赞
收藏

51CTO技术栈公众号