asp.net 操作带输入输出参数的分页存储过程(—)
来源:互联网 发布:苹果电脑装机软件 编辑:程序博客网 时间:2024/06/08 07:38
以前做项目,大部分做的是普通的项目,普通的代码,普通的编程模式。数据库操作基本是采用SQL语句的形式,先不说运行效率如何,至少维护,修改相当麻烦。
最近开始向asp.net的三层架构,MVC以及存储过程方面发展。在写一个通用的分页模块的时候,本能的利用了一下百度。搜索结果关于“存储过程,分页,asp.net“的代码一大把,复制了几个分页存储过程测试,发现没有几个能测试通过,有些并没有良好的注释,有的没有调用代码。让人无从下手。感慨之余,自已写了相关的代码。
- 以下是带输入输出参数的分页存储过程,该存储过程仅支持单表分页操作。
CREATE PROCEDURE [dbo].[GetNewsList] ----存储过程名称@curpage varchar(8), ----输入参数curpage 当前页码,可以用Request.QueryString["page']方式接收过来的。@pagesize varchar(8), ----输入参数pagesize 每页记录数,可以程序中自行定义@prikey varchar(8), ----输入参数主键,索引键或唯一列 如:id@tabname varchar(32), -----输入参数,数据表名,如: news@fldname varchar(64), -----输入参数,字段列表,返回在的记录集中包含的字段如:id,cid,title@condition varchar(64), -----输入参数,筛选条件,如:id<1 and title='a' 注意不要加where 关键字@sortname varchar(64), ------输入参数,排序字段,如:[updatetimes] asc,id desc,注意不要加order by@recordcount varchar(16) output -----输出参数,记录总数。asdeclare @csql varchar(1000) -------定义sql语名拼接变量beginset @csql='select top ' + cast(@pagesize as varchar) + ' ' + @fldname + ' from ['+ @tabname + ']' if @condition=' 'set @csql=@csql + ' where 1=1 'elseset @csql=@csql + ' where ' + @condition end beginif @curpage>1beginset @csql=@csql + ' and ' + @prikey + ' not in (select top ' + cast(((@curpage-1) * @pagesize) as varchar) + ' ' + @prikey + ' from [' + @tabname + '] 'if @condition=' 'set @csql=@csql + ' where 1=1 'elseset @csql=@csql + ' where ' + @condition if @sortname=' 'set @csql=@csql + ' order by ' + @prikey + ' asc)'elseset @csql=@csql + ' order by ' + @sortname + ' , ' + @prikey + ' asc)'endend execute (@csql) -----------------执行sql拼接后的语句,返回根据输入参数确定的记录begindeclare @tsql nvarchar(128)set @tsql='select @recordcount =count(' + @prikey + ') from [' + @tabname + ']'if @condition=' 'set @tsql=@tsql + ' where 1=1 'elseset @tsql=@tsql + ' where ' + @condition execute sp_executesql @tsql,N'@recordcount varchar output',@recordcount output -------------------返回输出参数记录总数。endGO
- C#代码 对应三层结构的数据层。
/// <summary>/// 针对存储过程的自定义分页功能/// </summary>/// <param name="SqlCommandText">存储过程名称</param>/// <param name="pagesize">每页记录条数</param>/// <param name="pagecount">页总数</param>/// <param name="recordcount">记录总数</param>/// <param name="SQLParameters">存储过程参数</param>/// <returns></returns>public static DataTable ExecuteReader(string SqlCommandText,int pagesize , ref int pagecount, ref int recordcount, params IDbDataParameter[] SQLParameters){ DataTable dt = null; IDbConnection conn = null; IDataReader reader = null; SqlCommand cmd = null; recordcount = -1; pagecount = -1; try { conn = new SqlConnection(dboString); ///初始化连接 cmd = new SqlCommand();///初始化命令对象 PrepareCommand(conn, cmd, SqlCommandText, SQLParameters); ///对传入的sql命令进行预处理 reader = cmd.ExecuteReader(); dt = DataReaderToDataTable(reader); ///将DataReader对象转换成DataTable reader.Close();///关闭DataReader对象,注意,在这里如果不先关闭对象,输出参数将无法获取 recordcount = Convert.ToInt32(cmd.Parameters["recordcount"].Value); ///获取输出参数,记录总数 pagecount = Convert.ToInt32((recordcount % pagesize > 0) ? (recordcount / pagesize + 1) : (recordcount / pagesize)); ///根据记录总和传入的页记录数计算页总数 } catch (Exception ex) { CustomErrors.ErrFlag = "database"; CustomErrors.ErrDescription = ex.Message + "dd"; } finally { DBConnClose(conn); } return dt;}
阅读全文
0 0
- asp.net 操作带输入输出参数的分页存储过程(—)
- asp.net 操作带输入输出参数的分页存储过程(—)
- asp.net 操作带输入输出参数的分页存储过程(二)
- asp.net 操作带输入输出参数的分页存储过程(三)
- asp.net 操作带输入输出参数的分页存储过程(四)
- asp.net 操作带输入输出参数的分页存储过程(四)
- asp.net 操作带输入输出参数的分页存储过程(三)
- asp.net 操作带输入输出参数的分页存储过程(二)
- asp.net 中调用SQL带输入输出的存储过程
- sql server 带输入输出参数的分页存储过程(效率最高)
- 使用带输入输出参数的存储过程
- Oracle带输入输出参数的存储过程
- ASP.NET中调用存储过程带(输入输出)参数和返回值例子
- asp.net中使用带参数的存储过程
- [转载]asp.net中使用带参数的存储过程
- asp.net调用带返回值参数的存储过程
- asp.net 调用 存储过程(带output 参数)
- sql2005带参数的分页存储过程
- [树的点分治] 不虚就是要AK
- 通向架构师的道路(第二天)之apache tomcat https应用
- 数据库存储引擎学习总结
- 通向架构师的道路(第三天)之apache性能调优
- UVALive4167 HDU2700 Parity【水题】
- asp.net 操作带输入输出参数的分页存储过程(—)
- 通向架构师的道路(第四天)之Tomcat性能调优
- Green关闭服务
- 设计模式(Design Pattern)
- Docker入门六部曲——Stack
- 深入理解Android NDK编译环境
- 通向架构师的道路(第五天)之tomcat集群
- Linux文件系统-linux学习001
- golang之TopN算法