存储过程的分页方法
2010-05-21 17:11
176 查看
分页的存储过程代码为:
然后创建c#的SQL执行语句:
此为执行存储过程的方法:
此为执行分页存储过程的方法:
举例说明:
在页面的后台这样调用:
注明:AspNetPager1是分页控件,大家可以去下载一个
CREATE PROCEDURE Sql_Conn_Sort ( @tblName varchar(255), -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名 @PageSize int , -- 页尺寸 @PageIndex int , -- 页码 @doCount bit = 0, -- 是否返回记录总数, 非 0 值则返回,如果是0则返回一个DataTable @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 @strWhere varchar(1500)='' -- 查询条件 (注意: 不要加 where) ) AS declare @strSQL varchar(5000) -- 主语句 declare @strTmp varchar(110) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @doCount != 0 begin if @strWhere !='' set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere else set @strSQL = 'select count(*) as Total from ' + @tblName end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 else begin if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by ' + @fldName +' desc' --如果@OrderType不是0,就执行降序,这句很重要! end else begin set @strTmp = '>(select max' set @strOrder = ' order by ' + @fldName +' asc' end if @PageIndex = 1 begin if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder else set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder --如果是第一页就执行以上代码,这样会加快执行速度 end else begin --以下代码赋予了@strSQL以真正执行的SQL代码 set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @fldName + '' + @strTmp + '('+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @fldName + '' + @strTmp + '(' + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize ) + ' ' + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder end end exec (@strSQL) GO
然后创建c#的SQL执行语句:
此为执行存储过程的方法:
/// <summary> /// 执行存储过程 /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <param name="tableName">DataTable结果中的表名</param> /// <returns>DataTable</returns> public static DataTable RunProcedureTable(string storedProcName, IDataParameter[] parameters) { using (SqlConnection connection = new SqlConnection(connectionString)) { DataTable dt = new DataTable(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dt); connection.Close(); return dt; } } /// <summary> /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// </summary> /// <param name="connection">数据库连接</param> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlCommand</returns> private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; }
此为执行分页存储过程的方法:
public static DataTable Get_DateTableByProc(string tblName, string retColumns, string orderfld, int PageSize, int pageIndex, int isCount, int orderType, string strWhere) { IDataParameter[] parameters = new SqlParameter[8]; parameters[0] = new SqlParameter("@tblName", SqlDbType.NVarChar, 255);//表名 parameters[1] = new SqlParameter("@strGetFields", SqlDbType.NVarChar, 1000);//需要返回的列 parameters[2] = new SqlParameter("@fldName", SqlDbType.NVarChar, 255);//排序的字段名 parameters[3] = new SqlParameter("@PageSize", SqlDbType.Int, 4);//每页显示条数 parameters[4] = new SqlParameter("@pageIndex", SqlDbType.Int, 4);//显示第几页 parameters[5] = new SqlParameter("@doCount", SqlDbType.Int, 4);//是否返回记录总数, 非 0 值则返回 parameters[6] = new SqlParameter("@orderType", SqlDbType.Int, 4);//设置排序类型, 非 0 值则降序 parameters[7] = new SqlParameter("@strWhere", SqlDbType.NVarChar, 500);// 查询条件 (注意: 不要加 where) parameters[0].Value = tblName; parameters[1].Value = retColumns; parameters[2].Value = orderfld; parameters[3].Value = PageSize; parameters[4].Value = pageIndex; parameters[5].Value = isCount; parameters[6].Value = orderType; parameters[7].Value = strWhere; try { return RunProcedureTable("Sql_Conn_Sort", parameters); } catch (Exception) { throw; } }
举例说明:
public DataTable ListTourismCHM(int iPageSize, int iPageIndex, int iCount, string strWhere) { return DbHelperSQL.Get_DateTableByProc("tbTourismCHM", "*", "Title", iPageSize, iPageIndex, iCount, 0, strWhere); }
在页面的后台这样调用:
private void BindData() { string strWhere = " 1=1 "; if (!ddlSort.SelectedValue.Equals("0")) { strWhere += " and sort= " + ddlSort.SelectedValue; } if (!txtTitle.Text.Trim().Equals("")) { strWhere += " and title like '%" + txtTitle.Text.Trim() + "%'"; } //TourismCHMBLL tourismCHMBLL = new TourismCHMBLL(); DataTable dt = tourismCHMBLL.ListTourismCHM(AspNetPager1.PageSize, AspNetPager1.CurrentPageIndex, 0, strWhere); GridViewBandData(gvTourismCHM, dt); //得到记录的总数 AspNetPager1.RecordCount = int.Parse(tourismCHMBLL.ListTourismCHM(AspNetPager1.PageSize, AspNetPager1.CurrentPageIndex, 1, strWhere).Rows[0][0].ToString()); AspNetPager1.CustomInfoHTML = "记录总数:<b>" + AspNetPager1.RecordCount.ToString() + "</b>"; AspNetPager1.CustomInfoHTML += " 总页数:<b>" + AspNetPager1.PageCount.ToString() + "</b>"; AspNetPager1.CustomInfoHTML += " 当前页:<font color=/"red/"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>"; }
注明:AspNetPager1是分页控件,大家可以去下载一个
相关文章推荐
- (转)几种常用存储过程分页方法
- 分页存储过程及调用方法
- SQL分页存储过程和C#中linq分页查询方法
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除 .
- asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除
- C#方法 Repeater、webdiyer:AspNetPager分页、存储过程分页
- SQL Server可按任意字段排序的分页存储过程(不用临时表的方法)
- mysql 分页存储过程 一次返回两个记录集(行的条数,以及行记录),DataReader的Read方法和NextResult方法
- 存储过程分页方法
- SQL SERVER 存储过程分页的3种通用方法
- SQL Server 公共分页存储过程及使用方法
- java+oracle的存储过程开发案例(包含了oracle存储过程的通用分页方法、java的工厂类)
- SQL 分页存储过程 以及SQL concatenate 几种方法
- 常用存储过程分页实现方法的性能比较
- 自己写的SQL存储过程分页方法
- SQL分页存储过程和C#中linq分页查询方法
- ORACLE分页存储过程及其使用方法
- 通用SQL存储过程分页以及asp.net后台调用的方法
- SQL Server2005及以上 存储过程分页方法分享