Consulta SQLServer com paginação

Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 22/04/2023


Consulta SQLServer com paginação

Segue abaixo uma procedure que executa paginação em uma consulta SQLServer e um exemplo prático de como usar essa procedure.

Procedure [GetPaginatedData]

CREATE PROCEDURE [dbo].[GetPaginatedData]
    @pageNumber int,
    @pageSize int
AS
BEGIN
    SET NOCOUNT ON;

    SELECT *
    FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY Id ASC) AS RowNumber, *
        FROM MyTable
    ) AS subquery
    WHERE RowNumber >= (@pageNumber - 1) * @pageSize + 1
    AND RowNumber <= @pageNumber * @pageSize
END

Essa procedure recebe dois parâmetros: @pageNumber e @pageSize. O @pageNumber é o número da página que você deseja recuperar e o @pageSize é o número de registros por página. A consulta interna usa a função ROW_NUMBER() para atribuir um número de linha a cada registro e, em seguida, filtra o resultado para retornar apenas os registros que correspondem à página solicitada.

Agora, vamos mostrar um exemplo prático de como usar essa procedure em um aplicativo C#:

public IEnumerable<MyModel> GetPagedData(int pageNumber, int pageSize)
{
    using (var connection = new SqlConnection("connectionString"))
    {
        connection.Open();

        var command = new SqlCommand("GetPaginatedData", connection);
        command.CommandType = CommandType.StoredProcedure;

        command.Parameters.AddWithValue("@pageNumber", pageNumber);
        command.Parameters.AddWithValue("@pageSize", pageSize);

        using (var reader = command.ExecuteReader())
        {
            var resultList = new List<MyModel>();

            while (reader.Read())
            {
                var model = new MyModel
                {
                    Id = (int)reader["Id"],
                    Name = (string)reader["Name"],
                    // ...
                };

                resultList.Add(model);
            }

            return resultList;
        }
    }
}

Este método C# cria uma conexão com o banco de dados e executa a procedure GetPaginatedData com os parâmetros de página e tamanho da página fornecidos. Em seguida, ele percorre os resultados da consulta e os converte em uma lista de objetos MyModel, que são retornados ao chamador.

Com essa procedure, você pode facilmente implementar a funcionalidade de paginação em suas consultas SQLServer em seu aplicativo C#.



Links Relacionados



Comentários