CARREGAR MAIS DE 100 MIL ITEMS SEM TRAVAR

KURTGU 13/11/2015 01:26:46
#453839
Citação:

:
Ué, são os mesmos controles que o VB.NET. Só a sintaxe da linguagem que muda, é exatamente o mesmo framework.
Se você faz no VB, você faz em C#.



Indiferente se consigo fazer em VB.Net o Forum e pra pedir ajuda é e o que estou fazendo, Se alguem Souber ou tiver algo que possa me indicar Agradeco A AJUDA...
KERPLUNK 13/11/2015 01:55:30
#453840
Crie uma classe:

public class Item
{
public int Codigo { get; set;}
public string Nome {get; set; }
}


Adicione método de leitura à ela:

public class Item
{
public int Codigo { get; set;}
public string Nome {get; set; }

public List<Item> GetAll()
{
List<Item> _return = null;
using (MySqlConnection cn = new MySqlConnection([Ô]Sua connection string aqui[Ô]))
{
try
cn.Open();
catch
throw;
using (MySqlCommand cmd = new MySqlCommand([Ô]SELECT * FROM TabelaXXX[Ô], cn))
{
using (MySqlDataReader dr = cmd.ExecuteReader();
{
if (dr.HasRows)
{
_return = new List<Item>();
while (dr.Read())
{
_return.Add(new Item()
{
Codigo = dr.GetInt32([Ô]Codigo[Ô]),
Nome = dr.GetString([Ô]Nome[Ô])
}
}
}
}
}
}
return _return;
}
}


Fiz de cabeça isso, então pode conter alguns erros. Também faltam os tratamentos para null nos dados, mas enfim. Quando quiser, uma lista desses objetos, você vai fazer algo como:

List<Item> minhaLista = new Item.GetAll();

Neste ponto, [Ô]minhaLista[Ô] vai conter todos os dados. Porém, esse comando pode levar um bom tempo para executar, visto que vai abrir uma tabela de 100 mil registros e percorrer ela inteira. Mas é possível marcar esse método como assíncrono, o que vai fazer o cursor executar mas a variável [Ô]minhaLista[Ô] vai estar vazia. Então mesmo marcando o método como assíncrono, seria melhor colocar um evento sendo disparado de dentro do loop.

Outra possibilidade, que ao meu ver não é uma boa idéia, é criar uma propriedade pública na classe e adicionar o retorno também à ela, além da variável de retorno.

Nossa, fazia tempo que não fazia algo assim à mão e de cabeça. Já tem muuuuuuito tempo que uso uma classe genérica que fiz para cuidar de toda essa parte de CRUD, me bastando usar as decorações nas propriedades. Se quiser, posso mostrar como é feita, mas já advirto é bem complexo para iniciantes(não em programação, mas com o C# mesmo), é um nível de abstração alto e muita recursão(praticamente tudo usando recursão). Mas depois de implementada, simplesmente é criada uma entidade, herdando dessa classe e pronto, todas as funções de gravação(Inserir, Editar, Excluir) e leitura(por chave primária, por cada campo e expressão lambda para pesquisas mais complexas). Na verdade é meio que uma cópia do que o EF faz, mas tudo na munheca, depurável e alterável. Não que o EF não seja, mas enfim...
KURTGU 13/11/2015 02:01:48
#453841
kerpLuck Mais uma vez Obrigada Pela Ajuda e Ensino...
KERPLUNK 13/11/2015 02:09:47
#453842
Veja bem que editei a resposta...
KERPLUNK 13/11/2015 02:17:15
#453843
Se seu objetivo é só fazer a barra de progresso andar enquanto lê os registros, fica mais simples, ainda terá que usar um delegate para ver em que registro está, além de ter que fazer uma query de contagem antes para ter o valor percentual de registros. Mas fica mais fácil.
KURTGU 13/11/2015 02:18:25
#453844
Vou implementando aqui pra ver no que vai dar..
Página 2 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas