分页:T-SQL存储过程和EF存储过程的使用

首先准备好分页的T-SQL语句:

 1 create proc usp_activityFenYe
 2 @pageIndex int,
 3 @pageSize int,
 4 @pageCount int output
 5 as
 6 declare @count int
 7 begin
 8 select @count=COUNT(*) from Activity
 9 set @pageCount=CEILING(@count*1.0/@pageSize)
10 select * from(select *,ROW_NUMBER()over(order by activityid) as num from Activity) as t
11 where num between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize
12 order by ActivityID asc
13 end

ADO.NET操作:

(1)DAL:

 1 public class ActivityDAL
 2     {
 3         public List<Activity> GetList(int pageIndex, int pageSize, out int pageCount)
 4         {
 5             SqlParameter[] pms = new SqlParameter[] {
 6            new SqlParameter("@pageIndex",pageIndex),
 7            new SqlParameter("@pageSize",pageSize),
 8            new SqlParameter("@pageCount",0)
 9            };
10             pms[2].Direction = ParameterDirection.Output;
11             List<Activity> list = new List<Activity>();
12             DataTable dt = DBHelper.ExecuteTableSP("usp_activityFenYe", pms);
13             if (dt.Rows.Count > 0)
14             {
15                 Activity model = new Activity();
16                 foreach (DataRow row in dt.Rows)
17                 {
18                     model = LoadEntity(row);
19                     list.Add(model);
20                 }
21             }
22             pageCount = Convert.ToInt32(pms[2].Value);
23             return list;
24         }
25
26         private Activity LoadEntity(DataRow row)
27         {
28             Activity model = new Activity();
29             model.ActivityID = Convert.ToInt32(row["ActivityID"]);
30             model.Name = row["Name"].ToString();
31             return model;
32         }
33     }

(2)BLL:

 1 public class ActivityBLL
 2     {
 3         ActivityDAL dal;
 4         public ActivityBLL()
 5         {
 6             dal = new ActivityDAL();
 7         }
 8         public List<Activity> GetList(int pageIndex, int pageSize, out int pageCount)
 9         {
10             return dal.GetList(pageIndex, pageSize, out pageCount);
11         }
12     }

(3)View:

 1 public class ActivityController : Controller
 2     {
 3         ActivityBLL bll;
 4         DBEntities db;//数据上下文
 5         public ActivityController()
 6         {
 7             bll = new ActivityBLL();
 8             db = new DBEntities();
 9         }
10         public ActionResult Index(int? pageIndex)
11         {
12             //1.ADO.NET
13             int pageSize = 5;
14             int pageCount;
15             List<Model.Activity> list = bll.GetList(pageIndex ?? 1, pageSize, out pageCount);
16             if (Request.IsAjaxRequest())
17             {
18                 return Json(list, JsonRequestBehavior.AllowGet);
19             }
20             ViewBag.pageCount = pageCount;//总页数
21
22             //2.EF存储过程
23             ObjectParameter obj = new ObjectParameter("pageCount", typeof(int));//注意:前面不要写@
24             ObjectResult<usp_activityFenYe_Result> result = db.usp_activityFenYe(pageIndex ?? 1, pageSize, obj);//使用之前记得导入存储过程
25             //ViewBag.pageCount = obj.Value;//EF传出的总页数
26
27             //3.另外一种基于EF的方法
28             SqlParameter pCount = new SqlParameter("pageCount", -1);//注意:前面不要写@
29             pCount.Direction = System.Data.ParameterDirection.Output;
30             SqlParameter pIndex = new SqlParameter("@pageIndex", 1);
31             SqlParameter pSize = new SqlParameter("pageSize", 5);
32             List<Models.Activity> data = db.Database.SqlQuery<Models.Activity>("exec usp_activityFenYe @pageIndex,@pageSize,@pageCount output", new object[] { pCount,pIndex,pSize}).ToList();
33             return View(list);
34         }
35     }

(4)Razor:

 1 @{
 2     Layout = null;
 3 }
 4 @model IEnumerable<Ado.Net.Model.Activity>
 5 <!DOCTYPE html>
 6 <html>
 7 <head>
 8     <meta name="viewport" content="width=device-width" />
 9     <title>Index</title>
10     <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
11     <script src="~/Scripts/jquery-1.8.2.min.js"></script>
12     <script>
13         function show(index) {
14             $.getJSON("@Url.Action("Index")", { pageIndex: index }).success(function (data) {
15                 var text = "";
16                 for (var i = 0; i < data.length; i++) {
17                     text += "<tr><td>" + data[i].ActivityID + "</td><td>" + data[i].Name + "</td><td><a href=‘javascript:;‘ onclick=‘del(" + data[i].ActivityID + ")‘>删除</a></td><td><a href=‘javascript:[email protected]("Modify")?id=" + data[i].ActivityID + ")‘>修改</a></td></tr>";
18                 }
19                 $("#table").html(text);
20                 $(".pagination li").removeClass("active").eq(index - 1).addClass("active");
21             })
22         };
23         function del(id) {
24             if (confirm("确定删除")) {
25                 $.post("@Url.Action("Del")", { id: id }).success(function (data) {
26                     if (data.status == 200)
27                         show(1);
28                 })
29             }
30         };
31     </script>
32 </head>
33 <body>
34     <div class="container">
35         <table class="table table-striped table-bordered">
36             <thead>
37                 <tr>
38                     <th>活动ID</th>
39                     <th>名称</th>
40                     <th>操作</th>
41                 </tr>
42             </thead>
43             <tbody id="table">
44                 @foreach (var i in Model)
45                 {
46                     <tr>
47                         <td>@i.ActivityID</td>
48                         <td>@i.Name</td>
49                         <td><a href="javascript:;" onclick="del(@i.ActivityID)">删除</a></td>
50                         <td><a href="@Url.Action("Modify", new { id = i.ActivityID })">修改</a></td>
51                     </tr>
52                 }
53             </tbody>
54         </table>
55         <nav>
56             <ul class="pagination pagination-lg">
57                 @for (int i = 1; i <= ViewBag.pageCount; i++)
58                 {
59                     <li @(i == 1 ? "class=active" : "")><a href="javascript:;" onclick="show(@i)">@i</a></li>
60                 }
61             </ul>
62         </nav>
63     </div>
64 </body>
65 </html>

时间: 2024-09-29 11:44:32

分页:T-SQL存储过程和EF存储过程的使用的相关文章

Sql Server中的存储过程

Transact-SQL中的存储过程,非常类似于c#语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储过程在创建时即在数据库服务器上进行了

SQL Server基础之&lt;存储过程&gt;

  简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理.本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作. 一:存储过程概述  SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口.在很多情况下,一些代码会被开发者重复编写多次,如果每次都编写相同功能

索引、视图、SQL优化以及数据库存储过程

一.索引 索引是查询优化最有效和最常用的技术 索引是一个单独的.物理的数据库结构,它是指向表中某一列或若干列上的指针列表. mysql中,一个表的物理存储由两部分组成,一部分用于存放表的数据,另一部分存放索引,当进行数据搜索时,mysql会首先搜索索引,从中找到所需数据的起始位置的指针,再直接通过指针查找目标数据. 1.创建索引: CREATE INDEX 索引名 on 表名(要添加索引的列名) 可以给一个表中的多个列添加索引 通过在查询sql语句前加一句Explain可以分析索引效率, 有这样

Sql server中根据存储过程中的部分信息查找存储过程名称的方法【视图和Function】

1.查询的语句: select a.id,b.name,a.*,b.* from syscomments a join sysobjects b on a.id=b.id where b.xtype='P' and a.text like '%usp_cm%' b.xtype='P'指定在什么类型的范围进行搜索 '%usp_cm%'就是你能记得的存储过程中的内容. 2.查找类型: select distinct xtype from sysobjects 找到数据库中所有的对象类型 P是存储过程

SQL Server 2000 系统存储过程

SQL Server 2000 系统存储过程 在 Microsoft? SQL Server? 中,许多管理和信息活动可以通过系统存储过程执行.系统存储过程按这些分类分组. 分类 描述 Active Directory 过程 用于在 Microsoft Windows? 2000 Active Directory? 中注册 SQL Server 实例和 SQL Server 数据库. 目录过程 执行 ODBC 数据字典功能,并隔离 ODBC 应用程序,使之不受基础系统表更改的影响. 游标过程 执

SQL 语句调用这个存储过程,生成顺序编码

一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的!看下这个Demo: 1.建立这样的简单的表Test. 2.设置字段id的自增. 3.表添加数据 insert into Test(name) values('TestName') insert into Test(name) values('TestNa

SQL Server事物的存储过程

在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示: 房型表:RoomType 房间表:Room 首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rTypeId 分析这两个表,我们会发现这样一个问题:在房间表和房型表管理中,当我们修改或者删除一个RoomType表,对应的Room表我们也要做修改和删除,那么我们怎么解决这个问题呢?首先可以在数据库中设置级联删除,或者利用触发器也可以解决...这

SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨

SQLSERVER为了确保返回正确的值,或者处于性能上的顾虑,有意不重用缓存在内存里的执行计划,而重新编译执行计划的这种行为,被称为重编译(recompile).那么引发存储过程重编译的条件有哪一些呢?下面罗列了一些导致重编译(recompile)的条件:     - 对查询所引用的表或视图进行更改(ALTER TABLE 和 ALTER VIEW).     - 对执行计划所使用的任何索引进行更改.     - 对执行计划所使用的统计信息进行更新,这些更新可能是从语句(如 UPDATE STA

Sql Server函数和存储过程

SQL Server函数是一种封装一条或多条SQL语句的结构. SQL Server函数分为系统函数和用户自定义函数两种. 标量值函数:标量值函数的返回值是基本数据类型的单个值或单个值得表达式. 函数体既可以是一条语句,也可以是多条语句. 创建标量值函数 语法: CREATE FUNCTION [schema_name.]function_name([{@parameter_name parameter_data_type[=default_value]}[...n]])RETURNS retu