Paginación SQL y C#

858 views
Skip to first unread message

Max Gmail

unread,
Jan 25, 2012, 9:33:18 AM1/25/12
to Alt-Net Hispano
Buen día...
 
Señores me dirijo a ustedes ya que estoy actualmente en un proyecto donde necesito realizar una paginación en C# al ejecutar ciertas querys dinámicas (el usuario la escribe y yo la ejecuto con sqlcommand.text = “la consulta del usuario”) ahora bien eh estado indagando sobre el tema de paginación en consultas de sql y eh visto que no hay una forma de realizar una paginación como tal, solo consultar el @@rowcount e intentar calcular el total y dividir para determinar las paginas y depues con el indice sacar los registros de una pagina con algo como > 10 <30 .... Me gustaria preguntarles si conocen algun tipo de paginación en sql.
 
Cabe aclarar que esta me debe permintir decir cuantas paginas tiene, poder navegar de pagina en pagina en desorden osea 1 3 7 despues 2.
 
Gracias, de antemano su atención.
 
Cordialmente,


Max Frank Rodriguez H.
Ingeniero de Desarrollo.


Bogotá, D.C. - Colombia
E-mail: ing.ma...@gmail.com
ing_ma...@hotmail.com

Ariel Piñeiro

unread,
Jan 25, 2012, 9:52:30 AM1/25/12
to altnet-...@googlegroups.com
Max,
       en mi experiencia personal, para realizar paginados en SQL Server (a diferencia de otros motores con la función LIMIT) optaría por un esquema de procedimientos almacenados, donde, cómo parámetros recibiría la cantidad de registros a retornar, y el número de página que solicitás, el SP puede retornar la cantidad de resultados totales, y un valor de offset que se utiliza para saber cual es el desplazamiento, se puede usar desde el client o desde el mismo sp para facilitar el paginado.

Un ejemplo posible de esta estrategia lo usa Mercadolibre con su API REST para buscar artículos https://api.mercadolibre.com/sites/MLA/search?q=ipod

Otro esquema posible y bastante sencillo es usar Entity Framework, con la ayuda de las funciones Skip, Limit, Take, y te quedaría una solución prolija a mi entender, hay mucha información en Internet sobre esta estrategia.

Saludos,
Ariel Piñeiro
http://ar.linkedin.com/in/arielpineiro



2012/1/25 Max Gmail <inge...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Juan Nallar

unread,
Jan 25, 2012, 12:08:07 PM1/25/12
to altnet-...@googlegroups.com
Podés usar link2sql (específicamente dynamic linq) y agregar los operadores "take" y "skip" para que te convierta la consulta. Se sigue paginando en el motor de la base de datos.
 
Saludos.

Kiquenet

unread,
Jan 26, 2012, 3:48:50 AM1/26/12
to altnet-...@googlegroups.com
Un link interesante sobre paginación Sql Server 2005

SQL Server 2005 Paging – The Holy Grail


Y en codeproject aparecen unos cuantos artículos sobre este tema, por ejemplo,

Leonardo Micheloni

unread,
Jan 26, 2012, 6:52:08 AM1/26/12
to altnet-...@googlegroups.com
En Sql Denali la paginación ya está resuelta en el motor, mientras tanto si estás con 2005 o superior podés aprovechar para usar CTE y rownumber, la idea sería que crees una CTE con el resultado y devuelvas una página en particular, no tenés mucha mejor opción si hablamos de hacerlo en el servidor con un stored procedure, si lo hacés desde linq2sql o EF usando skip y take hacen algo similar ya que no podés saber qué resultados vas a tener en la página 15 sin antes armar el resultado (con la CTE en el caso que yo digo) para saber la cantidad total no te queda otra que hacer otra consulta que devuelva la cantidad, hasta donde yo sé es la mejor apróximación

algunos ejemplos

http://www.sqlteam.com/article/server-side-paging-using-sql-server-2005

http://sqlserverplanet.com/sql/pagination-using-rownumber/

si tu consulta tiene muchos filtros no te va a quedar otra que convinar esta técnica con sql dinámico si te interesa la performance, ya que si ponés condiciones las cláusulas where no vas a permitir que el motor pre-calcule el plan.

saludos,


2012/1/26 Kiquenet <kiqu...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/vayiiES4QDwJ.

Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.



--
Leonardo Micheloni
@leomicheloni

Preguntón Cojonero Cabrón

unread,
Dec 4, 2017, 4:40:53 PM12/4/17
to AltNet-Hispano
Esto va cambiando cada año.

Cuál será el Holy Grail de la paginación en Sql Server? y con gran performance ? Tanto Sql Server 2012-2014-2016.. 

Con Sql Server 2012
SELECT * FROM TableName ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
https://stackoverflow.com/questions/109232/what-is-the-best-way-to-paginate-results-in-sql-server




Cómo combinar código C# (Repositorio en capa de Acceso a datos) y la paginación SQL Server?

Uzi Mamani Fernández

unread,
Dec 14, 2017, 9:20:36 AM12/14/17
to altnet-...@googlegroups.com
porque no mover todo el modelo de lectura (consultas) a otro repositorio mucho mas flexible y que permita hacer esto de forma mas sencilla, por ejemplo usar ElasticSearch

saludos

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Saludos

uZi

About me

Carlos Admirador

unread,
Dec 14, 2017, 6:46:35 PM12/14/17
to AltNet-Hispano
Gracias. Comentas "mas flexible, mas sencilla".

A partir de ahí me pregunto

Qué coste tiene montar una infraestructura con ElasticSearch, y si es posible en Windows Server.
Cómo pasar de tablas Sql Server a ese modelo en ElasticSearch y cómo consumirlo en C# (sea WinForms, ASP.NET, ...) ?

Tomo idea de Johnny Graber, https://improveandrepeat.com/tag/clean-code/, por ejemplo para Sonar Qube tiene una serie de posts que cuenta desde la instalación en Windows, la configuración y customatización, la puesta a punto en Producción y sus experiencias con la herramienta.

Te animarías a una VAN sobre ElasticSearch? 


The Succinctly series

This frustration translated into a deep desire to produce a series of concise technical books that would be targeted at developers working on the Microsoft platform.
We firmly believe, given the background knowledge such developers have, that most topics can be translated into books that are between 50 and 100 pages.
This is exactly what we resolved to accomplish with the Succinctly series. Isn’t everything wonderful born out of a deep desire to change things for the better?


Saludos gente!!!!
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Uzi Mamani Fernández

unread,
Dec 21, 2017, 7:49:34 AM12/21/17
to altnet-...@googlegroups.com
La instalacion de ElasticSearch es sencilla, incluso la configuracion en cluster tb lo es, una vez instalado simplemente funciona.
Lo que puedo decirte es que no hay magia o una herramienta magica que mueva datgos de una BD Relacional a ElasticSearch, debes escribir tu ETL donde desnormalizaras tu data para consultas y busquedas y claro establecer alguna politica de actualizacion de datos, para ello debes tener en cuenta que tu modelo del lectura en ElasticSearch sera eventualmente consistente, hacer esto no es sencillo pero tampoco es una tarea muy complicada,

Si podria hacer una van de ElasticSearch o porahi publicar un post (hace mucho timepo que no escribo)

saludos!!!

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.

Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

María NET Developer - Mírame a los ojos

unread,
Dec 21, 2017, 5:49:50 PM12/21/17
to AltNet-Hispano
+1 a VAN ElasticSearch 

Carlos Admirador

unread,
Dec 27, 2017, 6:02:04 PM12/27/17
to AltNet-Hispano
+1

El jueves, 21 de diciembre de 2017, 23:49:50 (UTC+1), María NET Developer - Mírame a los ojos escribió:
+1 a VAN ElasticSearch 

Preguntón Cojonero Cabrón

unread,
Dec 30, 2017, 8:14:56 AM12/30/17
to AltNet-Hispano
+1 a VAN +1 a Post

Le animo a qué haga una VAN, sería muy interesante sus experiencias.

Vicenç Garcia

unread,
Jan 2, 2018, 4:45:02 AM1/2/18
to altnet-...@googlegroups.com
Hola,

no tengo ni idea de cual es el holy grail de la paginación en SQL Server a día de hoy, pero yo me haría primero las siguientes preguntas:
 - necesita nuestra aplicación lo último de lo último? (quizá al final tenemos unos pocos millares de registros y no nos hace falta complicarnos la vida)
 - necesitamos tener un modelo de lectura a la CQRS? Esto tiene implicaciones muy serias a nivel técnico y a nivel de negocio.
 - tenemos búsquedas tan complejas que necesitamos ElasticSearch? Según que queramos hacer nos puede valer el full text search de SQL Server de sobras.

Salut!

2017-12-30 13:14 GMT+00:00 Preguntón Cojonero Cabrón <pregunto...@gmail.com>:
+1 a VAN +1 a Post

Le animo a qué haga una VAN, sería muy interesante sus experiencias.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Uzi Mamani Fernández

unread,
Jan 3, 2018, 1:11:00 PM1/3/18
to altnet-...@googlegroups.com
es un buen punto, depende mucho de como sea el modelo de datos, si necesitamos hacer unos 4 o 5 joins para sacar algo y ese algo se utiliza muy a menudo, podríamos ver alternativas para mover ese conjunto de resultados a otro lugar enforma desnormalizada y ver como mantenerlo al dia (o que tan actualizados necesitamos esos resultados) para empezar y ver que alternativas podemos usar.
La otra pregunta, es nuestro modelo de lectura (consultas) es el mismo (o tiene que ser el mismo) que mi modelo transaccional?
Esto ultimo le pega al a performance de consultas y escrituras...
y hay mucha mas lana que destejer ahi...
para tomar una decision responsable

saludos

2018-01-02 4:44 GMT-05:00 Vicenç Garcia <vincen...@gmail.com>:
Hola,

no tengo ni idea de cual es el holy grail de la paginación en SQL Server a día de hoy, pero yo me haría primero las siguientes preguntas:
 - necesita nuestra aplicación lo último de lo último? (quizá al final tenemos unos pocos millares de registros y no nos hace falta complicarnos la vida)
 - necesitamos tener un modelo de lectura a la CQRS? Esto tiene implicaciones muy serias a nivel técnico y a nivel de negocio.
 - tenemos búsquedas tan complejas que necesitamos ElasticSearch? Según que queramos hacer nos puede valer el full text search de SQL Server de sobras.

Salut!
2017-12-30 13:14 GMT+00:00 Preguntón Cojonero Cabrón <pregunto...@gmail.com>:
+1 a VAN +1 a Post

Le animo a qué haga una VAN, sería muy interesante sus experiencias.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Saludos

uZi

About me

Carlos Admirador

unread,
Mar 9, 2018, 1:59:21 PM3/9/18
to AltNet-Hispano
Idea loca: Suena  a alguna charla de Codemotion, o similar, quizá para el próximo Codemotion algo así...


El martes, 2 de enero de 2018, 10:45:02 (UTC+1), Vicenç Garcia escribió:
Hola,

no tengo ni idea de cual es el holy grail de la paginación en SQL Server a día de hoy, pero yo me haría primero las siguientes preguntas:
 - necesita nuestra aplicación lo último de lo último? (quizá al final tenemos unos pocos millares de registros y no nos hace falta complicarnos la vida)
 - necesitamos tener un modelo de lectura a la CQRS? Esto tiene implicaciones muy serias a nivel técnico y a nivel de negocio.
 - tenemos búsquedas tan complejas que necesitamos ElasticSearch? Según que queramos hacer nos puede valer el full text search de SQL Server de sobras.

Salut!
2017-12-30 13:14 GMT+00:00 Preguntón Cojonero Cabrón <pregunto...@gmail.com>:
+1 a VAN +1 a Post

Le animo a qué haga una VAN, sería muy interesante sus experiencias.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Carlos Admirador

unread,
Mar 9, 2018, 2:02:57 PM3/9/18
to AltNet-Hispano
uZiGuLa, Para cuándo esa VAN ElasticSearch ?


El miércoles, 3 de enero de 2018, 19:11:00 (UTC+1), uZiGuLa escribió:
es un buen punto, depende mucho de como sea el modelo de datos, si necesitamos hacer unos 4 o 5 joins para sacar algo y ese algo se utiliza muy a menudo, podríamos ver alternativas para mover ese conjunto de resultados a otro lugar enforma desnormalizada y ver como mantenerlo al dia (o que tan actualizados necesitamos esos resultados) para empezar y ver que alternativas podemos usar.
La otra pregunta, es nuestro modelo de lectura (consultas) es el mismo (o tiene que ser el mismo) que mi modelo transaccional?
Esto ultimo le pega al a performance de consultas y escrituras...
y hay mucha mas lana que destejer ahi...
para tomar una decision responsable

saludos
2018-01-02 4:44 GMT-05:00 Vicenç Garcia <vincen...@gmail.com>:
Hola,

no tengo ni idea de cual es el holy grail de la paginación en SQL Server a día de hoy, pero yo me haría primero las siguientes preguntas:
 - necesita nuestra aplicación lo último de lo último? (quizá al final tenemos unos pocos millares de registros y no nos hace falta complicarnos la vida)
 - necesitamos tener un modelo de lectura a la CQRS? Esto tiene implicaciones muy serias a nivel técnico y a nivel de negocio.
 - tenemos búsquedas tan complejas que necesitamos ElasticSearch? Según que queramos hacer nos puede valer el full text search de SQL Server de sobras.

Salut!
2017-12-30 13:14 GMT+00:00 Preguntón Cojonero Cabrón <pregunto...@gmail.com>:
+1 a VAN +1 a Post

Le animo a qué haga una VAN, sería muy interesante sus experiencias.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Saludos

uZi

About me
Reply all
Reply to author
Forward
0 new messages