Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 21

Постраничный просмотр в SqlDataAdapter (MS SQL Server 2008 R2)

20.11.2018, 14:31. Показов 4310. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Пытаюсь реализовать постраничный вывод из базы SQL в DataGridView на форме. Есть вот такой код из примера:

C#
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace PagingApp
{
    public partial class Form1 : Form
    {
        int pageSize = 5; // размер страницы
        int pageNumber = 0; // текущая страница
        string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True";
        SqlDataAdapter adapter;
        DataSet ds;
        public Form1()
        {
            InitializeComponent();
             
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView1.AllowUserToAddRows = false;
 
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                adapter = new SqlDataAdapter(GetSql(), connection);
 
                ds = new DataSet();
                adapter.Fill(ds, "Users");
                dataGridView1.DataSource = ds.Tables[0];
                dataGridView1.Columns["Id"].ReadOnly = true;
            }
        }
        // обработчик кнопки Вперед
        private void nextButton_Click(object sender, EventArgs e)
        {
            if (ds.Tables["Users"].Rows.Count < pageSize) return;
 
            pageNumber++;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                adapter = new SqlDataAdapter(GetSql(), connection);
 
                ds.Tables["Users"].Rows.Clear();
 
                adapter.Fill(ds,"Users");
            }
        }
        // обработчик кнопки Назад
        private void backButton_Click(object sender, EventArgs e)
        {
            if (pageNumber==0) return;
            pageNumber--;
             
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                adapter = new SqlDataAdapter(GetSql(), connection);
 
                ds.Tables["Users"].Rows.Clear();
 
                adapter.Fill(ds, "Users");
            }
        }
 
        private string GetSql()
        {
            return "SELECT * FROM Users ORDER BY Id OFFSET ((" + pageNumber + ") * " + pageSize + ") " +
                "ROWS FETCH NEXT " + pageSize + "ROWS ONLY";
        }
    }
}
Проблема в том, что я использую SQL Server 2008 R2 и в нем не работает "OFFSET FETCH". Подскажите, пожалуйста, как можно преобразовать для 2008 R2 эту строчку:

C#
1
return "SELECT * FROM Users ORDER BY Id OFFSET ((" + pageNumber + ") * " + pageSize + ") " + "ROWS FETCH NEXT " + pageSize + "ROWS ONLY"
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2018, 14:31
Ответы с готовыми решениями:

Мини Документооборот C#2008 и SQL Server 2008
Здраствуйте господа Программисты. думаю над способом реализации мини документоборота хотябы создать начальный каркас!!! например можно...

Sql server 2008 r2 express
Установится ли на windows7 Sql server 2008 r2 express (SQL Server Database Engine и SQL Server Management Studio Express) ?

Просмотр содержимого таблиц в Microsoft SQL Server 2008 Management Studio Express
Кто-нибудь может подсказать как настроить(или переустановить) SQL Server 2008 Magagement Studio Express чтобы можно было просмотреть...

4
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
20.11.2018, 15:24
yarmak72,

а если так?

SQL
1
SELECT * FROM Users ORDER BY Id OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY
0
0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 21
20.11.2018, 16:44  [ТС]
meridbt,

Ошибка при отладке:

System.Data.SqlClient.SqlException: "Неправильный синтаксис около конструкции "OFFSET".
Недопустимое использование параметра NEXT в инструкции FETCH."

Подобный вариант я уже пробовал, не работает.
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
20.11.2018, 16:55
link
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
21.11.2018, 14:24
Лучший ответ Сообщение было отмечено yarmak72 как решение

Решение

yarmak72,

Вот так в 2008 R2 должно работать.
OFFSET FETCH с 2012 версии только работает

SQL
1
2
3
4
5
6
SELECT TOP (20) *
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY a.Id) AS 'RowNum'
    FROM dbo.Users AS a
)  AS s
WHERE s.RowNum > 20
ORDER BY s.Id
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2018, 14:24
Помогаю со студенческими работами здесь

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее?
---

Внедрение Windows server 2008+MS SQL Server 2008+1C:SQL
Приветствую Вас,Друзья по разуму!:handshake:Столкнулся с такой темой впервые!Очень прошу поделиться опытом:help:Был бы очень...

Настройка SQL Server 2008 для работы с SQL Server Management Studio
Доброго времени суток. Подскажите пожалуйста, что нужно сделать для того, чтобы SQL Server Management Studio соединялось с SQL сервером ?...

Чем отличается Microsoft® SQL Server® 2008 Express with Tools от Microsoft® SQL Server® 2008 Express with Adva
Друзья! Есть две СУБД, как я понимаю: Microsoft® SQL Server® 2008 Express with Tools Microsoft® SQL Server® 2008 Express with...

Можно использовать бд созданную в SQL server 2012 на SQL server 2008?
Можно использовать бд созданную в SQL server 2012 на SQL server 2008? если да,то как ее подключить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru