Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как выбрать строки с 5 по 10? / 9 сообщений из 9, страница 1 из 1
21.01.2010, 14:19
    #36422889
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
В Оракле можно ограничить выбор данных с [n] по [m] следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select
*
from
(
	select rownum as n, t.* from my_table where my_field = some_value
)

where n between :n and :m

В АДО.НЕТ выборка из таблиц производится методом MyTable.Select("my_field = 'some_value')
который возвращает массив строк.
Есть ли какой либо способ ограничить кол-во возвращаемых строк аналогично ораклу?


С уважением. Ашот.

p.s. это нужно для "постраничного" отображения данных
...
Рейтинг: 0 / 0
21.01.2010, 15:02
    #36423038
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
Выборка должна быть серверной (SQL запрос)? Тогда озвучьте название SQL-сервера, с которым работаете.
Если Выборка локальная (например, из DataTable), то:

Код: plaintext
var table = MyTable.AsEnumerable().Skip(n).Take(m).CopyToDataTable();
...
Рейтинг: 0 / 0
21.01.2010, 15:12
    #36423068
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
МСУВыборка должна быть серверной (SQL запрос)? Тогда озвучьте название SQL-сервера, с которым работаете.
Если Выборка локальная (например, из DataTable), то:

Код: plaintext
var table = MyTable.AsEnumerable().Skip(n).Take(m).CopyToDataTable();


Как раз не серверной, выбираю из ДатаСет..........
И вроде ваш ответ, то - что нужно............ спасибо, попробую........
...
Рейтинг: 0 / 0
21.01.2010, 15:32
    #36423148
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
karapetyan_aКак раз не серверной, выбираю из ДатаСет

Если:

karapetyan_aэто нужно для "постраничного" отображения данных

то нужно выбирать с сервера, а не прокачивать все данные на клиента (ASP.NET приложение), а потом резать локально. Это серьезный удар по производительности SQL-сервера.

Пример для MS SQL Server 2000
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
CREATE PROCEDURE northwind_OrdersPaged
(
    @PageIndex int, 
    @PageSize int
)
AS
BEGIN
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @RowsToReturn int

-- First set the rowcount
SET @RowsToReturn = @PageSize * (@PageIndex +  1 )
SET ROWCOUNT @RowsToReturn

-- Set the page bounds
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize +  1 

-- Create a temp table to store the select results
CREATE TABLE #PageIndex 
(
    IndexId int IDENTITY ( 1 ,  1 ) NOT NULL,
    OrderID int
)

-- Insert into the temp table
INSERT INTO #PageIndex (OrderID)
SELECT 
    OrderID
FROM 
    Orders
ORDER BY 
    OrderID DESC

-- Return total count
SELECT COUNT(OrderID) FROM Orders

-- Return paged results
SELECT 
    O.*
FROM 
    Orders O,
    #PageIndex PageIndex
WHERE 
    O.OrderID = PageIndex.OrderID AND
    PageIndex.IndexID > @PageLowerBound AND
    PageIndex.IndexID < @PageUpperBound
ORDER BY 
    PageIndex.IndexID

END


Пример для MS SQL Server 2005/2008
Код: plaintext
1.
2.
3.
SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY name) AS num, id, name FROM sysobjects) t
WHERE num BETWEEN  10  AND  20 
ORDER BY num
...
Рейтинг: 0 / 0
21.01.2010, 15:48
    #36423211
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
МСУ,

Речь об ASP.NET приложении, так-как вся база 2000 строк, и клиенты никак не обновляют ее, то я при старте приложения закачал все в DataSet и держу в памяти один на всех экземпляр.
при выборе пользователем типа товара, я выбираю все товары выбранного типа, ну пусть их будет 100 строк и вот при отображении хочется сделать что-то типа DataPager (точно не помню названия, короче постраничной листалки )............
Так что речь о запросов на сервер не идет......... ( с SQL-ом я бы выкрутился )
Речь идет именно о НЕТ. овских объектах/коллекциях где данные уже загружены с сервера.......
...
Рейтинг: 0 / 0
21.01.2010, 15:51
    #36423222
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
МСУ
то нужно выбирать с сервера, а не прокачивать все данные на клиента (ASP.NET приложение), а потом резать локально. Это серьезный удар по производительности SQL-сервера.


как раз в моем случае никакого "удара по производительности SQL-сервера" нет, потому как я обращаюсь к нему один раз, при Application_Start..................
...
Рейтинг: 0 / 0
21.01.2010, 15:59
    #36423253
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
karapetyan_a2000 строк, и клиенты никак не обновляют ее, то я при старте приложения закачал все в DataSet и держу в памяти один на всех экземпляр.
Ну если актуальность данные крайне низка или обновление данных пользователями происходит крайне редко, то добро.
Но, всё-равно - лучше DataSet в Cache загрузите (в Global.aspx, чтобы датасет сам обновлялся).
Сохранение элемента с политикой устаревания 10 минут, не имеющего зависимостей:
Код: plaintext
Cache.Insert("MyItem", датасет, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));

karapetyan_aРечь идет именно о НЕТ. овских объектах/коллекциях где данные уже загружены с сервера.......
Ну тогда ок.
...
Рейтинг: 0 / 0
21.01.2010, 16:11
    #36423289
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
МСУGlobal.aspx
Global.asax
...
Рейтинг: 0 / 0
21.01.2010, 16:44
    #36423395
karapetyan_a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать строки с 5 по 10?
МСУ,

По поводу кеша......... подумаю........
Я в АСП.НЕТ новичек, первый сайт пишу, так все больше на ВинФормс.....
Именно в Global-е и прописал статичное свойство ДатаСет...........
Но может Ваш вариант будет предпочтительнее......... жизнь покажет
Почитаю про кеш........ приму решение.....

По любому спасибо за советы.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как выбрать строки с 5 по 10? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]