Using stored procedure
This sample demonstrate how to use stored procedure to fetch only needed data to display for the current page
| Order ID | Order Date | Customer ID | Ship Address |
|---|---|---|---|
| 10760 | 12/1/1997 12:00:00 AM | MAISD | Rue Joseph-Bens 532 |
| 10761 | 12/2/1997 12:00:00 AM | RATTC | 2817 Milton Dr. |
| 10762 | 12/2/1997 12:00:00 AM | FOLKO | Åkergatan 24 |
| 10763 | 12/3/1997 12:00:00 AM | FOLIG | 184, chaussée de Tournai |
| 10764 | 12/3/1997 12:00:00 AM | ERNSH | Kirchgasse 6 |
| 10765 | 12/4/1997 12:00:00 AM | QUICK | Taucherstraße 10 |
| 10766 | 12/5/1997 12:00:00 AM | OTTIK | Mehrheimerstr. 369 |
| 10767 | 12/5/1997 12:00:00 AM | SUPRD | Boulevard Tirou, 255 |
| 10768 | 12/8/1997 12:00:00 AM | AROUT | Brook Farm Stratford St. Mary |
| 10769 | 12/8/1997 12:00:00 AM | VAFFE | Smagsloget 45 |
| 10770 | 12/9/1997 12:00:00 AM | HANAR | Rua do Paço, 67 |
| 10771 | 12/10/1997 12:00:00 AM | ERNSH | Kirchgasse 6 |
| 10772 | 12/10/1997 12:00:00 AM | LEHMS | Magazinweg 7 |
| 10773 | 12/11/1997 12:00:00 AM | ERNSH | Kirchgasse 6 |
| 10774 | 12/11/1997 12:00:00 AM | FOLKO | Åkergatan 24 |
| 10775 | 12/12/1997 12:00:00 AM | THECR | 55 Grizzly Peak Rd. |
| 10776 | 12/15/1997 12:00:00 AM | ERNSH | Kirchgasse 6 |
| 10777 | 12/15/1997 12:00:00 AM | GOURL | Av. Brasil, 442 |
| 10778 | 12/16/1997 12:00:00 AM | BERGS | Berguvsvägen 8 |
| 10779 | 12/16/1997 12:00:00 AM | MORGK | Heerstr. 22 |
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<PagedList<Order>>" %>
<%@ Import Namespace="Webdiyer.Mvc2Demo.Models" %>
<%@ Import Namespace="Webdiyer.WebControls.Mvc" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Using stored procedure
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Using stored procedure</h2>
<div>This sample demonstrate how to use stored procedure to fetch
only needed data to display for the current page</div><br />
<table width="98%">
<tr><th>Order ID</th><th>Order Date</th><th>Customer ID</th><th>Ship Address</th></tr>
<%foreach(Order od in Model)
{
%>
<tr><td><%=od.OrderID %></td><td><%=od.OrderDate.ToString() %></td>
<td><%=od.CustomerID %></td><td><%=od.ShipAddress %></td></tr>
<%
} %>
</table>
<%=Html.Pager(Model, new PagerOptions { PageIndexParameterName = "id",
NumericPagerItemCount=15})%>
</asp:Content>
CREATE PROCEDURE P_GetPagedOrders2005
(@startIndex INT,
@endindex INT
)
AS
begin
WITH orderList AS (
SELECT ROW_NUMBER() OVER (ORDER BY O.orderid DESC)AS Row, O.*
from orders O)
SELECT *
FROM orderlist
WHERE Row between @startIndex and @endIndex
end
public ActionResult StoredProcedure(int? id)
{
using (var db = new MvcPagerDemoDataContext())
{
//start record index
int startIndex = id.HasValue && id.Value > 1 ? (id.Value - 1) * 20 + 1 : 0;
//get data for display in current page using stored procedure
List<Order> orders = db.GetPagedOrders(startIndex, startIndex + 20).ToList();
//total record count to page through
int totalOrders = db.Orders.Count();
//Create PagedList<T> using constructor
PagedList<Order> pagedOrders = new PagedList<Order>(orders, id ?? 1, 20, totalOrders);
return View(pagedOrders);
}
}