asp.net 操作带输入输出参数的分页存储过程(—)
2017-07-01 00:31
706 查看
以前做项目,大部分做的是普通的项目,普通的代码,普通的编程模式。数据库操作基本是采用SQL语句的形式,先不说运行效率如何,至少维护,修改相当麻烦。
最近开始向asp.net的三层架构,MVC以及存储过程方面发展。在写一个通用的分页模块的时候,本能的利用了一下百度。搜索结果关于“存储过程,分页,asp.net“的代码一大把,复制了几个分页存储过程测试,发现没有几个能测试通过,有些并没有良好的注释,有的没有调用代码。让人无从下手。感慨之余,自已写了相关的代码。
以下是带输入输出参数的分页存储过程,该存储过程仅支持单表分页操作。
C#代码 对应三层结构的数据层。
最近开始向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 -----输出参数,记录总数。 as declare @csql varchar(1000) -------定义sql语名拼接变量 begin set @csql='select top ' + cast(@pagesize as varchar) + ' ' + @fldname + ' from ['+ @tabname + ']' if @condition=' ' set @csql=@csql + ' where 1=1 ' else set @csql=@csql + ' where ' + @condition end begin if @curpage>1 begin set @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 ' else set @csql=@csql + ' where ' + @condition if @sortname=' ' set @csql=@csql + ' order by ' + @prikey + ' asc)' else set @csql=@csql + ' order by ' + @sortname + ' , ' + @prikey + ' asc)' end end execute (@csql) -----------------执行sql拼接后的语句,返回根据输入参数确定的记录 begin declare @tsql nvarchar(128) set @tsql='select @recordcount =count(' + @prikey + ') from [' + @tabname + ']' if @condition=' ' set @tsql=@tsql + ' where 1=1 ' else set @tsql=@tsql + ' where ' + @condition execute sp_executesql @tsql,N'@recordcount varchar output',@recordcount output -------------------返回输出参数记录总数。 end GO
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; }
相关文章推荐
- asp.net 操作带输入输出参数的分页存储过程(二)
- asp.net 操作带输入输出参数的分页存储过程(三)
- [导入]asp.net调用带有输入和输出参数的存储过程
- asp.net 操作带输入输出参数的分页存储过程(四)
- asp.net获取存储过程的输出参数
- MyBatis之四:调用存储过程含分页、输入输出参数
- asp.net获取存储过程的输出参数
- asp.net获取存储过程的输出参数
- asp.net实现调用带有输出参数的存储过程实例
- asp.net实现调用带有输出参数的存储过程实例
- ASP调用存储过程:有输入参数和输出参数的存储过程
- asp.net 调用带有输出参数的存储过程
- ASP调用存储过程:有输入参数和输出参数的存储过程
- 【ASP.NET开发】ADO.NET调用带输出参数的存储过程 分类: ASP.NET 2012-09-10 21:16 1261人阅读 评论(1) 收藏
- asp.net获取存储过程的输出参数
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 取的存储过程的返回值和输出参数(asp.net 和vb)
- 使用ADO.NET对象调用存储过程的输入和输出参数
- asp.net 存储过程 输出参数 取不到值
- ASP.NET结合存储过程写的通用搜索分页程序