Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: .NET Framework
.NET .NET
Standard
Постраничный просмотр результатов запроса - это процесс возврата результатов запроса небольшими подмножествами данных (страницами). Этот метод часто используется для вывода результатов пользователю в виде небольших фрагментов, с которыми легко работать.
SqlDataAdapter позволяет возвращать только одну страницу данных с помощью перегрузок метода Fill. Однако это может быть не лучшим решением для постраничного просмотра большого числа результатов запроса. Хотя класс DataAdapter заполняет целевые объекты DataTable или DataSet только запрошенными записями, при этом все равно используются ресурсы, необходимые для возврата всех результатов запроса.
Для возврата страницы данных из источника данных без использования лишних ресурсов задайте для запроса дополнительные критерии, которые ограничат число возвращаемых строки только необходимыми.
Чтобы использовать метод Fill для возврата страницы данных, укажите с помощью параметра startRecord первую запись на странице данных, а с помощью параметра maxRecords — число записей на странице данных.
Пример
В следующем примере кода показано, как использовать метод Fill для возврата первой страницы результатов запроса, где размер страницы — пять записей.
int currentIndex = 0;
int pageSize = 5;
string orderSQL = "SELECT * FROM Orders ORDER BY OrderID";
// Assumes that connection is a valid SqlConnection object.
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, currentIndex, pageSize, "Orders");
В предыдущем примере DataSet заполняется только пятью записями, но возвращается вся таблица Orders. Чтобы заполнить DataSet теми же пятью записями и возвратить только пять записей, в инструкции SQL используйте предложения TOP и WHERE, как в следующем примере кода.
int pageSize = 5;
string orderSQL = "SELECT TOP " + pageSize +
" * FROM Orders ORDER BY OrderID";
// Assumes that connection is a valid SqlConnection object.
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "Orders");
Примечание.
При таком постраничном просмотре результатов запроса необходимо сохранить unique identifier, задающий порядок строк, чтобы передать команде уникальный идентификатор для получения следующей страницы записей, как показано в следующем примере кода.
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Чтобы получить next page of records, используя перегрузку метода Fill, принимающую параметры startRecord и maxRecords, увеличьте индекс текущей записи на размер страницы и заполните таблицу.
Примечание.
Следует помнить, что сервер базы данных возвращает все результаты запроса, даже если к DataSet добавляется только одна страница записей.
В следующем примере кода строки таблицы очищаются, а затем заполняются следующей страницей данных. Может быть необходимым сохранить определенное число возвращенных строк в локальном кэше, чтобы уменьшить число обращений к серверу базы данных.
currentIndex += pageSize;
// Assumes that dataset and adapter are valid objects.
dataSet.Tables["Orders"].Rows.Clear();
adapter.Fill(dataSet, currentIndex, pageSize, "Orders");
Чтобы возвратить следующую страницу записей, не заставляя сервер баз данных возвращать сразу все результаты запроса, укажите ограничивающие критерии для инструкции SELECT. Так как код предыдущего примера сохранил последнюю возвращенную запись, ее можно использовать в предложении WHERE, чтобы указать для запроса начальную точку, как показано в следующем примере кода.
orderSQL = "SELECT TOP " + pageSize +
" * FROM Orders WHERE OrderID > " + lastRecord + " ORDER BY OrderID";
adapter.SelectCommand.CommandText = orderSQL;
dataSet.Tables["Orders"].Rows.Clear();
adapter.Fill(dataSet, "Orders");