Dúvida ADO x Quantidade de Registros C#
11/01/2012
0
Tenho um framework ao qual ja postei algumas dúvidas aqui no forúm, funciona muito bem usando o conceito de MVC e tudo mais.
Como preciso trabalha com N bancos não uso EF e nem nada disso, fiz na mão toda a parte de CRUD que por sinal também funciona muito bem.
A dúvida é a seguinte, imagina que tenho uma tabela no banco, TBCLIENTES com 500 mil clientes, e tenho uma tela que mostro esses clientes em um datagridview.
Básicamente quando construo a tela forço o usuário a filtrar o máximo possivel, para não ficar uma consulta pesada, mas mesmo assim pode acontecer da consulta acabar retornado 100 mil registros por exemplos.
Quando ele manda carregar os dados o framework cria uma lista do OBJETO CLIENTE_ENT e retorna para a tela essa lista, ai ela é vinculada ao datasource do datagridview, mais ou menos conforme abaixo:
List<Cliente_ENT> voClientes = new List<Cliente_ENT>(); DbCommand voComando = _providerFactory.CreateCommand(); voComando.CommandType = CommandType.Text; voComando.CommandText = SELECT * FROM TBCLIENTES; voComando.Connection = _conexao; voComando.Transaction = _transacao; DbDataReader voReader = voComando.ExecuteReader(); if (voReader.HasRows) { while (voReader.Read()) { Cliente_ENT voCli = new Cliente_ENT(); //Preencho o objeto voCli. voClientes.Add(voCli); } } return voClientes;
E se a consulta retornar os 100 mil registros por exemplo a operação vai ficar impossível de ser realizada.
Então ai vai algumas dúvidas, esquecendo um pouco o cenário que tenho de MVC e tudo mais, se eu fosse simplesmente preencher esses dados em um DataGridView usando ADO:
- O ADO tem algum jeito que ele traz uma certa quantia e a medida que vou rolando as linhas ele vai trazendo automaticamente as demais linhas do banco e adicionado no grid? (Talvez ele faça isso nativamente nessa situação e eu não saiba).
- No meu caso, usando uma ENTIDADE (CLIENTE_ENT), teria como fazer algo semelhante?
Fico no aguardo dos comentários. Obrigado.
Francisco Gimenez
Posts
12/01/2012
Leandro Ribeiro
Não sei se você já tentou algo parecido, mas dá para fazer isso nas próprias consultas de BD.
No sql server 2005 por exemplo pode ser feito assim:
Pegar os primeiros 10 registros
SELECT Desc, Data FROM (SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY Data DESC) AS Row, Desc, Data FROM Tabela) AS RowNumbers WHERE Row >= 1 AND Row <= 10
Pegar os próximos 10 registros
SELECT Desc, Data FROM (SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY Data DESC) AS Row, Desc, Data FROM Tabela) AS RowNumbers WHERE Row >= 11 AND Row <= 20
12/01/2012
Francisco Gimenez
É que eu vi em algum lugar uma vez que dava pra deixa o componente (datagridview) ligado a fonte de dados e conforme você fosse rolando os dados ele ia automaticamente pegando os dados no banco.
12/01/2012
Leandro Ribeiro
Se você descobrir como fazer isso direto do banco posta pra gente blz?
Abraços.
Clique aqui para fazer login e interagir na Comunidade :)