Implementar paginación en procedimientos almacenados.
Autor:Eve Cole
Fecha de actualización:2009-07-01 15:55:30
No soy un programador con mucha experiencia, por lo que encontraré muchos problemas durante el proyecto. El uso de paginación en la base de datos es uno de los problemas que encontré durante el proyecto. Verifiqué mucha información de Internet y hay muchos métodos. Pero creo que crear una tabla de datos temporal es el método más simple. Cuando estaba haciendo la extensión de Membresía, descubrí que Microsoft también la usaba de esta manera. Simplemente abre un procedimiento almacenado de Membresía y echa un vistazo.
De nada sirve decir más, solo mira el código y quedará claro, jaja.
1CREAR PROCEDIMIENTO dbo.CreateSimple
2(
3 @PageIndex entero,
4 @PageSizeint
5)
6AS
7COMENZAR
8 --Defina tres variables:
9 - @PageLowerBound: el límite inferior de los registros recuperados.
10 - @PageUpperBound: el límite superior de registros que se recuperarán.
11 - @TotalRecords: devuelve el número total de registros, utilizado principalmente para cálculos de páginas.
12 DECLARAR @PageLowerBound int
13 DECLARAR @PageUpperBound int
14 DECLARAR @TotalRecords int
15
16 --Calcular los valores de los límites superior e inferior.
17 SET @PageLowerBound=@PageIndex * @PageSize
18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
19
20--Crear tabla temporal:
21--IndexId es el identificador y aumenta automáticamente en 1;
22--SimpleId se completa con la tabla de datos [Simple];
23 CREAR TABLA #PageIndexForSimple
veinticuatro (
25 IndexId int identidad(0,1) NO NULO,
26 ID simpleint
27)
28--Llenando la mesa temporal
29 INSERTAR EN #PageIndexForSimple(SimpleId)
30 SELECCIONAR s.[SimpleId]
31 DE [Simple] s
32 --Aquí se pueden agregar declaraciones WHERE y ODER BY
33
34: obtiene el número total de registros. De hecho, el número de filas afectadas es el número total de registros.
35 SELECCIONAR @TotalRecords=@@ROWCOUNT
36
37 --Conseguir el disco que queremos.
38 SELECCIONAR s.*
39 DE [Simple] s,#PageIndexForSimple p
40 DONDE s.[SimpleId]=p.[SimpleId]
41 Y p.[IndexId]>=@PageLowerBound
42 Y P.[IndexId]< =@PageUpperBound
43 ORDENAR POR s.[Simple]
44
45: devuelve el número total de registros.
46 RETURN @TotalRecords
47FIN Puedes entenderlo por los comentarios anteriores Jaja, ahora que lo he escrito aquí, escribe también el código del programa:
1Lista pública GetSimple(int pageIndex,int pageIndex,out int totalRecords){
2 Lista entidad=nueva Lista();
3 Parámetro Sql[]param=nuevo Parámetro Sql[]{
4 nuevos SqlParameter("@PageIndex",SqlDbType.Int),
5 nuevos SqlParameter("@PageSize",SqlDbType.Int),
6 nuevos SqlParameter("@ReturnValue",SqlDbType.Int),
7};
8 parámetro[0].Value=pageIndex;
9 parámetro[1].Valor=tamañodepágina;
10 parámetro[2].Dirección = ParameterDirection.ReturnValue;
11 Lector SqlDataReader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", parámetro);
12 Mientras(lector.Read()){
13 entidad.Agregar (GetSimpleEntity (lector))
14}
15 lector.Cerrar();
16 intento {
17 registros totales=(int)param[2].Valor;
18 }atrapar{}
19 entidad de retorno;
20} Algunas de las funciones anteriores fueron escritas por mí mismo:
Clase SqlHelper: clase de consulta de base de datos simplificada.
GetSimpleEntity (lector SqlDataReader): dado que la adquisición de clases de entidad básicas se usa a menudo en proyectos, se escribe una función privada separada para su reutilización;
Cabe señalar que al obtener el número total de registros, el tipo puede ser DbNull, provocando un error.
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html