Implementar paginação em procedimentos armazenados
Autor:Eve Cole
Data da Última Atualização:2009-07-01 15:55:30
Não sou um programador muito experiente, então encontrarei muitos problemas durante o projeto. Usar paginação no banco de dados é um dos problemas que encontrei durante o projeto. Verifiquei muitas informações na Internet e existem muitos métodos. Mas acho que criar uma tabela de dados temporária é o método mais simples. Quando eu estava fazendo a extensão de associação, descobri que a Microsoft também a usava dessa maneira. Você pode simplesmente abrir um procedimento armazenado de associação e dar uma olhada.
Não adianta falar mais, é só olhar o código que fica claro, haha.
1CRIAR PROCEDIMENTO dbo.CreateSimple
2(
3@PageIndexint,
4@PageSizeint
5)
6AS
7 COMEÇAR
8 --Defina três variáveis:
9 -- @PageLowerBound: O limite inferior dos registros recuperados.
10 -- @PageUpperBound: O limite superior dos registros a serem recuperados.
11 -- @TotalRecords: Retorna o número total de registros, usado principalmente para cálculos de páginas.
12 DECLARE @PageLowerBound int
13 DECLARE @PageUpperBound int
14 DECLARE @TotalRecords int
15
16 --Calcule os valores dos limites superior e inferior.
17 DEFINIR @PageLowerBound=@PageIndex * @PageSize
18 DEFINIR @PageUpperBound=@PageLowerBound+@PageSize-1
19
20--Criar tabela temporária:
21--IndexId é o identificador e aumenta automaticamente em 1;
22--SimpleId é preenchido pela tabela de dados [Simple];
23 CRIAR TABELA #PageIndexForSimple
vinte e quatro (
25 IndexId int identidade(0,1) NÃO NULO,
26 SimpleId interno
27)
28--Preenchendo a tabela temporária
29 INSERIR EM #PageIndexForSimple(SimpleId)
30 SELECIONE s.[SimpleId]
31 DE [Simples] s
32 --A condição WHERE e as instruções ODER BY podem ser adicionadas aqui
33
34 --Obtenha o número total de registros. Na verdade, o número de linhas afetadas é o número total de registros.
35 SELECIONE @TotalRecords=@@ROWCOUNT
36
37 --Obtenha o registro que queremos.
38 SELECIONE.*
39 FROM [Simples] s,#PageIndexForSimple p
40 ONDE s.[SimpleId]=p.[SimpleId]
41 E p.[IndexId]>=@PageLowerBound
42 E P.[IndexId]< =@PageUpperBound
43 ORDER BY s.[Simples]
44
45 --Retorna o número total de registros.
46 RETURE @TotalRecords
47END Você pode entender pelos comentários acima Haha, agora que escrevi aqui, escreva também o código do programa:
1Public List<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
2 Lista<Simples> entidade=new Lista<Simples>();
3 SqlParameter[]param=novo SqlParameter[]{
4 novos SqlParameter("@PageIndex",SqlDbType.Int),
5 novos SqlParameter("@PageSize",SqlDbType.Int),
6 novos SqlParameter("@ReturnValue",SqlDbType.Int),
7};
8 param[0].Value=pageIndex;
9 param[1].Value=pageSize;
10 param[2].Direção = ParameterDirection.ReturnValue;
11 Leitor SqlDataReader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", parâmetro);
12 Enquanto(leitor.Read()){
13 entidade.Add(GetSimpleEntity(leitor))
14}
15 leitor.Fechar();
16 tente{
17 totalRecords=(int)param[2].Value;
18 }pegar{}
19 entidade de retorno;
20} Algumas das funções acima foram escritas por mim:
Classe SqlHelper: classe simplificada de consulta de banco de dados.
GetSimpleEntity (leitor SqlDataReader): Como a aquisição de classes de entidade básicas é frequentemente usada em projetos, uma função privada separada é escrita para reutilização;
Vale ressaltar que ao obter o número total de registros, o tipo pode ser DbNull, causando erro.
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html