CARREGAR MAIS DE 100 MIL ITEMS SEM TRAVAR
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...
Crie uma classe:
Adicione método de leitura à ela:
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:
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...
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...
kerpLuck Mais uma vez Obrigada Pela Ajuda e Ensino...
Veja bem que editei a resposta...
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.
Vou implementando aqui pra ver no que vai dar..
Tópico encerrado , respostas não são mais permitidas