通过存储过程来实现分页实例
高手飘过,发给那些在摸索中的新手们,在此表示那些热心肠的高手们,谢谢你们了~
///////////////////////////////////////////////
建立类文件SqlHelper.cs 
////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace ERP.userclass
{
   class SqlHelper
    {
      private static readonly string strCon = "server='数据库IP';uid='用户名';pwd='密码';database=数据库名";
       SqlConnection con = new SqlConnection(strCon);
        private DataSet ds;
        private SqlCommand cmd;
        private SqlDataAdapter sda;
        private SqlDataReader myReader;
        private SqlTransaction transaction;
       //检查连接的方法;若连接是关闭的,则打开连接
       public void CheckConnection()
       {
           if (this.con.State == ConnectionState.Closed)
           {
               this.con.Open();
           }
       }
       public DataSet ExecuteDataSetProc(string strSQL,int pagesize ,int pageindex)
       {
           CheckConnection();
           DataSet ds1 = new DataSet();
           try
           {
               cmd = new SqlCommand(strSQL, con);
                = CommandType.StoredProcedure;
               SqlParameter[] para ={ new SqlParameter("@PageSize", SqlDbType.Int), new SqlParameter("@PageIndex", SqlDbType.Int) };
               para[0].Value = pagesize;
               para[1].Value = pageindex;
               cmd.Parameters.AddRange(para);
               SqlDataAdapter dap = new SqlDataAdapter();
               dap.SelectCommand = cmd;
               dap.Fill(ds1, "sickinfo");
           }
           catch (Exception e)
           {
               e.Message.ToString();
           }
           finally
           {
               con.Close();
           }
           return ds1;
       }
       public int ExecuteNonQuery(string strSQL)
       {
           int count = 0;
           CheckConnection();
           try
           {
               cmd = new SqlCommand(strSQL, con);
               count = cmd.ExecuteNonQuery();
           }
           catch (Exception ex)
           {
               throw new Exception(ex.Message);
           }
           finally
           {
               con.Close();
           }
           return count;
       }
       public int ReturnRowCount(string strSQL)
       {
           CheckConnection();
           try
           {
               cmd = new SqlCommand(strSQL, con);
               return Convert.ToInt32(cmd.ExecuteScalar().ToString());
           }
           catch
           {
               return 0;
           }
           finally
           {
               con.Close();
           }
       }
    }
}
////////////////////////////////////////////
	
		
			
		
	
using System;
using System.Collections.Generic;
using 
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ADMEWinForm
{
    public partial class Form1 : Form
    {
        SqlHelper db = new SqlHelper();
        public int rowcount;
        public int NowPage = 1, PageCount = 1, PageSize = 20;
        public Form1()
        {
            InitializeComponent();
        }
        public void BindData()
        {
            setBtnStatus();
         //这里是调用存储过程并传入页码和当前页面
            this.dataGridView1.DataSource = db.ExecuteDataSetProc("Pagination", PageSize, NowPage).Tables["sickinfo"];         
        }   
        private void Form1_Load(object sender, EventArgs e)
        {
            BindData();
        }
        //计算余页
        public int OverPage()
        {
            int pages = 0;
            if (rowcount % PageSize != 0)
                pages = 1;
            else
                pages = 0;
            return pages;
        }
        public void setBtnStatus()
        {
           rowcount= db.ReturnRowCount("select count(1) from TGongwen ");
           PageCount = rowcount / PageSize + OverPage();
            this.label2.Text="共"+PageCount+"页 共"+rowcount+"条记录";
            this.label1.Text = "当前是第" + NowPage + "页";
            if (NowPage > 1)
            {
                this.button5.Enabled = true;
                this.button6.Enabled = true;
            }
            else
            {
                this.button5.Enabled = false;
                this.button6.Enabled = false;
            }
            if (NowPage == PageCount)
            {
                this.button7.Enabled = false;
                this.button8.Enabled = false;
            }
            else
            {
                this.button7.Enabled = true;
                this.button8.Enabled = true;
            }        
        }
        private void button5_Click(object sender, EventArgs e)
        {
            NowPage = 1;
            Form1_Load(sender,e);
        }
        private void button6_Click(object sender, EventArgs e)
        {
            NowPage -= 1;
            Form1_Load(sender,e);
        }
        private void button7_Click(object sender, EventArgs e)
        {
            NowPage += 1;
            Form1_Load(sender,e);
        }
        private void button8_Click(object sender, EventArgs e)
        {
            NowPage = PageCount;
            Form1_Load(sender,e);
        }
                    }
}
///////////////////////存储过程/////////////////////////////////////////////////
CREATE PROCEDURE Pagination  
 
@PageSize   int = 10,          -- 页尺寸  
 
@PageIndex  int = 1          -- 页码  
 
AS  
declare @strSQL   varchar(5000)       -- 主语句  
set @strSQL ='select top ' +str(@PageSize) +' * from sickinfo  where id>(select isnull(max(id),0) from(select top '+ str((@PageIndex-1)*@PageSize) +' id from sickinfo  order by id  )as T)order by id '
if(@PageIndex =1)
begin
set @strSQL='select top '+str(@PageSize)+' * from sickinfo   order by id desc '
end
else
begin
 set @strSQL ='select top ' +str(@PageSize) +' * from sickinfo  where id<(select isnull (min(id),0) from(select top '+str((@PageIndex-1)*@PageSize) +' id from sickinfo  order by id desc )as T)order by id desc '
end
 
exec ( @strSQL)
GO
///////////////////////////////////////////////