Без хранимых процедур, как вы просматриваете наборы результатов в ASP.NET? - PullRequest
2 голосов
/ 25 августа 2009

Без хранимых процедур, как вы просматриваете результирующие наборы, полученные из SQL Server в ASP.NET?

Ответы [ 5 ]

9 голосов
/ 25 августа 2009

Вы можете использовать LINQ, например:

 var customerPage = dataContext.Customers.Skip(50).Take(25);

, а затем отобразить эти 25 клиентов.

См. Отлично Скотта Гатри Использование LINQ-to-SQL - раздел 6 - получение продуктов с подкачкой на стороне сервера.

Другой вариант (в SQL Server 2005 и более поздних версиях) - использовать упорядоченные CTE (Common Table Expression) - что-то вроде этого:

WITH CustomerCTE AS
(
  SELECT CustomerID, 
         ROW_NUMBER() OVER (ORDER BY CustomerID DESC) AS 'RowNum'
  FROM Customers
)
SELECT * FROM CustomerCTE
WHERE rownum BETWEEN 150 AND 200

Вы в основном определяете CTE по своим критериям сортировки, используя функцию ROW_NUMBER, и затем вы можете выбрать любое количество из них по своему желанию (здесь: между 150 и 200). Это очень эффективный и очень полезный пейджинг на стороне сервера. Присоединитесь к этому CTE со своими фактическими таблицами данных, и вы сможете получить все, что вам нужно!

Марк

PS: хорошо, так что у OP есть только SQL Server 2000, так что CTE не будет работать: - (

Если вы не можете выполнить обновление до SQL Server 2005 или .NET 3.5, я боюсь, что единственно возможный вариант - это хранимые процедуры. Вы можете сделать что-то вроде этого - см. Этот блог Эффективная и динамическая подкачка на стороне сервера с SQL Server 2000 , или Подкачка с использованием хранимых процедур SQL Server

3 голосов
/ 25 августа 2009

Лучше всего использовать ORM, который будет генерировать для вас динамический код подкачки - LINQ To SQL, NHibernate, Entity Framework, SubSonic и т. Д.

Если у вас небольшой набор результатов, вы можете просматривать страницы на сервере, используя DataPager , PagedDataSource или вручную, используя команды LINQ Skip и Take.

0 голосов
/ 25 августа 2009

Что ж, мой общий подход обычно заключается в создании двух таблиц для разбиваемых результатов. Первая - это информационная таблица, в которой есть столбец идентификатора идентификатора поиска и номера строк минимального и максимального значений. Вторая таблица содержит фактические результаты и содержит столбец идентификаторов для номера строки. Я вставляю во вторую таблицу и получаю строки min и max и сохраняю их в первой таблице. Затем я могу пролистать, выбрав только строки, которые я хочу. Я обычно истекаю через 24 часа, используя код прямо перед вставкой. Я обычно использую хранимую процедуру, чтобы выполнить вставки для меня, но вы можете сделать это без хранимой процедуры.

Преимущество этого состоит в том, что один раз выполняется более сложный поиск SQL. И набор данных не будет меняться между отображениями страницы. Это снимок данных. Это также может упростить сортировку на стороне сервера. Мне просто нужно выбрать эти строки по порядку и заново вставить во вторую таблицу.

0 голосов
/ 25 августа 2009

Так я обрабатывал все свои подкачки и сортировку с помощью AJAX в своем приложении ASP.NET 2.0.

http://programming.top54u.com/post/AJAX-GridView-Paging-and-Sorting-using-C-sharp-in-ASP-Net.aspx

0 голосов
/ 25 августа 2009

(новый ответ, поскольку вы используете SQL Server 2000, .NET 2.0 и не хотите использовать ORM)

Существует два способа обработки подкачки в SQL Server 2000:

  1. Если у вас есть столбец идентификатора, который является последовательным без отверстий, вы можете выполнить строку SQL, которая говорит что-то вроде SELECT Name, Title FROM Customers WHERE CustomerID BETWEEN @low and @high - @low и @high - это параметры, которые рассчитываются на основе размера страницыи страница, на которой вы находитесь.Подробнее об этом здесь .

  2. Если у вас нет последовательного идентификатора, вы в конечном итоге используете минимальный идентификатор и @@ rowcount для выбора диапазона.Например, SET @@rowcount 20; SELECT Name, Title FROM Customers WHERE CustomerID > @low' - либо вычисление @low из размера страницы и страницы, либо из последнего отображенного CustomerID.Есть некоторая информация об этом подходе здесь .

Если у вас небольшой набор данных, вы можете просматривать его в коде .NET, но он менее эффективен.Я бы порекомендовал PagedDataSource, но если вы хотите написать его самостоятельно, вы можете просто прочитать свои записи из SqlDataReader в массив, а затем использовать функцию Array.Range для пролистывания его .

...