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 |
|---|---|---|---|
| 10920 | 3/3/1998 12:00:00 AM | AROUT | Brook Farm Stratford St. Mary |
| 10921 | 3/3/1998 12:00:00 AM | VAFFE | Smagsloget 45 |
| 10922 | 3/3/1998 12:00:00 AM | HANAR | Rua do Paço, 67 |
| 10923 | 3/3/1998 12:00:00 AM | LAMAI | 1 rue Alsace-Lorraine |
| 10924 | 3/4/1998 12:00:00 AM | BERGS | Berguvsvägen 8 |
| 10925 | 3/4/1998 12:00:00 AM | HANAR | Rua do Paço, 67 |
| 10926 | 3/4/1998 12:00:00 AM | ANATR | Avda. de la Constitución 2222 |
| 10927 | 3/5/1998 12:00:00 AM | LACOR | 67, avenue de l'Europe |
| 10928 | 3/5/1998 12:00:00 AM | GALED | Rambla de Cataluña, 23 |
| 10929 | 3/5/1998 12:00:00 AM | FRANK | Berliner Platz 43 |
| 10930 | 3/6/1998 12:00:00 AM | SUPRD | Boulevard Tirou, 255 |
| 10931 | 3/6/1998 12:00:00 AM | RICSU | Starenweg 5 |
| 10932 | 3/6/1998 12:00:00 AM | BONAP | 12, rue des Bouchers |
| 10933 | 3/6/1998 12:00:00 AM | ISLAT | Garden House Crowther Way |
| 10934 | 3/9/1998 12:00:00 AM | LEHMS | Magazinweg 7 |
| 10935 | 3/9/1998 12:00:00 AM | WELLI | Rua do Mercado, 12 |
| 10936 | 3/9/1998 12:00:00 AM | GREAL | 2732 Baker Blvd. |
| 10937 | 3/10/1998 12:00:00 AM | CACTU | Cerrito 333 |
| 10938 | 3/10/1998 12:00:00 AM | QUICK | Taucherstraße 10 |
| 10939 | 3/10/1998 12:00:00 AM | MAGAA | Via Ludovico il Moro 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);
}
}