关于这个网上有很多,但都不是非常完整,许多看的一头雾水。我也是根据前辈的很多资料进行了总结,做一个完整的介绍,希望大家共同学习。

首先是存储过程:

 

 
  
  1. ALTER PROCEDURE [dbo].[GetRecordFromPage] 
  2.     @tblName      varchar(255),       -- 表名 
  3.     @fldName      varchar(255),       -- 字段名 
  4.     @PageSize     int = 10,           -- 页尺寸 
  5.     @PageIndex    int = 1,            -- 页码 
  6.     @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回 
  7.     @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序 
  8.     @strWhere     varchar(2000) = ''  -- 查询条件 (注意: 不要加 where) 
  9. AS 
  10.  
  11. declare @strSQL   varchar(6000)       -- 主语句 
  12. declare @strTmp   varchar(1000)       -- 临时变量 
  13. declare @strOrder varchar(500)        -- 排序类型 
  14. declare @str varchar(500) --字符串临时变量 
  15.  
  16. if @OrderType != 0 
  17. begin 
  18.     set @strTmp = '<(select min' 
  19.     set @strOrder = ' order by [' + @fldName + '] desc' 
  20. end 
  21. else 
  22. begin 
  23.     set @strTmp = '>(select max' 
  24.     set @strOrder = ' order by [' + @fldName +'] asc' 
  25. end 
  26.  
  27. set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
  28.     + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
  29.     + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
  30.     + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' 
  31.     + @strOrder 
  32.  
  33. if @strWhere != '' 
  34.     set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
  35.         + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
  36.         + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
  37.         + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') ' 
  38.         + @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder 
  39.  
  40.  
  41. if @PageIndex = 1 
  42. begin 
  43.     set @strTmp = '' 
  44.     if @strWhere != '' 
  45.         set @strTmp = ' where (' + @strWhere + ') ' 
  46.  
  47.     set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
  48.         + @tblName + ']' + @strTmp + ' ' + @strOrder 
  49. end 
  50.  
  51. if @IsReCount != 0 
  52.     set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where (' + @strWhere + ') ' 
  53.  
  54. exec (@strSQL) 

如果是需要建立的那么就将ALTER修改为CREATE即可;

下面就介绍如何使用,我采用三层架构的方式:

首先是WEB:

 

 
  
  1. /// <summary> 
  2.        /// 查询按钮 
  3.        /// </summary> 
  4.        /// <param name="sender"></param> 
  5.        /// <param name="e"></param> 
  6.        protected void btnSearch_Click(object sender, EventArgs e) 
  7.        { 
  8.            SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL(); 
  9.            this.AspNetPager.RecordCount = bll.GetCount(this.txtStr.Text); 
  10.            this.BindData(); 
  11.        } 
  12.  

这个是按钮的事件

 

 
  
  1. /// <summary> 
  2. /// 绑定列表 
  3. /// </summary> 
  4. private void BindData() 
  5.     SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL(); 
  6.     DataSet ds = bll.GetList(this.AspNetPager.PageSize, this.AspNetPager.CurrentPageIndex, this.txtStr.Text, "1"); 
  7.     this.HSGridView.DataSource = ds; 
  8.     this.HSGridView.DataBind(); 

这个是绑定到GridView的函数;

 

BLL层:

 

 
  
  1. /// <summary> 
  2.        /// 分页获得数据列表 
  3.        /// </summary> 
  4.        /// <param name="PageSize">每页数量</param> 
  5.        /// <param name="PageIndex">当前页索引</param> 
  6.        /// <param name="strWhere">查询字符串</param> 
  7.        /// <param name="OrderType">设置排序类型, 非 0 值则降序</param> 
  8.        /// <returns></returns> 
  9.        public DataSet GetList(int PageSize, int PageIndex, string strWhere, string OrderType) 
  10.        { 
  11.            return dal.GetList(PageSize, PageIndex, strWhere, OrderType); 
  12.        } 

 

DAL层:

 

 
  
  1. /// <summary> 
  2. /// 分页获取数据列表 
  3. /// </summary> 
  4. /// <param name="PageSize">每页数量</param> 
  5. /// <param name="PageIndex">当前页索引</param> 
  6. /// <param name="strWhere">查询字符串</param> 
  7. /// <param name="OrderType">设置排序类型, 非 0 值则降序</param> 
  8. /// <returns></returns> 
  9. public DataSet GetList(int PageSize, int PageIndex, string str, string OrderType) 
  10.     string keyStr = ""
  11.     if (str != ""
  12.     { 
  13.        keyStr = "Name like '%" + str + "%'"
  14.     } 
  15.     SqlParameter[] parameters = { 
  16.             new SqlParameter("@tblName", SqlDbType.VarChar, 255), 
  17.             new SqlParameter("@fldName", SqlDbType.VarChar, 255), 
  18.             new SqlParameter("@PageSize", SqlDbType.Int), 
  19.             new SqlParameter("@PageIndex", SqlDbType.Int), 
  20.             new SqlParameter("@IsReCount", SqlDbType.Bit), 
  21.             new SqlParameter("@OrderType", SqlDbType.Bit), 
  22.             new SqlParameter("@strWhere", SqlDbType.VarChar,1000), 
  23.             }; 
  24.     parameters[0].Value = "HS_Code"
  25.     parameters[1].Value = "Name"
  26.     parameters[2].Value = PageSize; 
  27.     parameters[3].Value = PageIndex; 
  28.     parameters[4].Value = 0; 
  29.     parameters[5].Value = int.Parse(OrderType); 
  30.     parameters[6].Value = keyStr; 
  31.     return DBHelper.RunProcedure("GetRecordFromPage", parameters, "ds"); 

其中keyStr = "Name like '%" + str + "%'"; 就是传入模糊查询的参数了

 

最后就是DBHelper了:

 

 
  
  1. /// <summary> 
  2. /// 执行存储过程 
  3. /// </summary> 
  4. /// <param name="storedProcName">存储过程名</param> 
  5. /// <param name="parameters">存储过程参数</param> 
  6. /// <param name="tableName">DataSet结果中的表名</param> 
  7. /// <returns>DataSet</returns> 
  8. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName) 
  9.     using (SqlConnection connection = new SqlConnection(connectionString)) 
  10.     { 
  11.         DataSet dataSet = new DataSet(); 
  12.         connection.Open(); 
  13.         SqlDataAdapter sqlDA = new SqlDataAdapter(); 
  14.         sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); 
  15.         sqlDA.Fill(dataSet, tableName); 
  16.         connection.Close(); 
  17.         return dataSet; 
  18.     } 
  19.  
  20. /// <summary> 
  21. /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) 
  22. /// </summary> 
  23. /// <param name="connection">数据库连接</param> 
  24. /// <param name="storedProcName">存储过程名</param> 
  25. /// <param name="parameters">存储过程参数</param> 
  26. /// <returns>SqlCommand</returns> 
  27. private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) 
  28.     SqlCommand command = new SqlCommand(storedProcName, connection); 
  29.     command.CommandType = CommandType.StoredProcedure; 
  30.     foreach (SqlParameter parameter in parameters) 
  31.     { 
  32.         if (parameter != null
  33.         { 
  34.             if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && 
  35.                 (parameter.Value == null)) 
  36.             { 
  37.                 parameter.Value = DBNull.Value; 
  38.             } 
  39.             command.Parameters.Add(parameter); 
  40.         } 
  41.     } 
  42.  
  43.     return command; 

这样大体能实现功能了。

希望对大家有帮助。