Какой лучший способ сделать пейджинг на моей странице ASP - PullRequest
0 голосов
/ 15 ноября 2009

Как лучше всего выполнять подкачку на странице ASP при отображении списка элементов?

Я знал, что в SQL Server нет эквивалента предложению MySQL LIMIT, 2000 или 2005.

Как я могу получить некоторые конкретные записи (записи с 20 по 30) из БД?

Нужно ли мне получать все записи из базы данных и что-то делать на моей странице ASP, чтобы отобразить необходимые записи?

Ответы [ 3 ]

4 голосов
/ 15 ноября 2009

Как лучше всего выполнять подкачку на моей странице ASP при отображении списка элементов?

Я просто хочу добавить еще одну особенность к ответу мистера Уитя. Почему бы вам не попробовать использовать функции linq Take () и Skip () (очевидно, если вы используете dotnet framework 3.5+)

Это действительно полезно при работе с большими наборами данных.

Посмотри Использование метода Take и Skip в запросах LINQ

Я знал, что в SQL-сервере нет предложения MySQL LIMIT (должны поддерживаться и 2000, и 2005). Как я могу получить некоторые конкретные записи (Запись 20-30) из БД?

Вы можете сделать это в SQLSERVER 2005+, используя функцию ранжирования Row_Number () среди других альтернатив. Пример примера включен в настоящее время

Сначала я создаю фиктивную таблицу и вставляю около 50 записей

declare @tbl table(name varchar(50),age int)
;with num_cte as
(   select 1 as rn
    union all
    select rn+1 from num_cte where rn<50
)  
insert @tbl
select  names ,rn + 20 ageval                
from num_cte
cross apply( select  'name' + CAST(rn as varchar(2))  AS names) names
select * from @tbl

Теперь с помощью функции Row_Number () я собираю записи между 20 и 30

.
select name,age from(
select ROW_NUMBER()over (order by age) as rownum,name,age from @tbl) X
where X.rownum between 20 and 30

Однако для достижения того же в SQL SERVER 2000 следующий запрос поможет

select name,age from(
select t1.name,t1.age,
(select count(*)+1 from @tbl where name<>t1.name and age<=t1.age) rownum
from @tbl t1
)X(name,age,rownum)
where rownum between 20 and 30
0 голосов
/ 15 ноября 2009

Вам нужно использовать ROW_NUMBER (SQL Server 2005+)

 SELECT * FROM
    (SELECT a.*, ROW_NUMBER() OVER (ORDER BY hire_date) rn
    FROM hr.employees AS OF TIMESTAMP (TIMESTAMP '2009-01-29 10:30:00') a)
 WHERE rn BETWEEN 10 AND 19

Соответствующий ответ

Используя ROW_NUMBER, вы нумеруете и сортируете неотсортированную группу (таблицу). Если у вас есть упорядоченный набор вместо просто набора , теперь вы можете иметь предложение " Я хочу, чтобы все строки от 10 до 19 " имели смысл.

Вам нужно будет использовать код ASP, чтобы сохранить верхний и нижний элементы, чтобы вы могли запросить следующий или предыдущий набор строк для отображения.

...