Olá, gostaria de saber se alguém pode me ajudar.
Estou tentando realizar um select do mysql de forma genérica, mas não consigo jogar na tela os dados de forma correta.
Resultado esperado: Id: id1 Nome: nome1 Email: email1 Id: id2 Nome: nome2 Email: email2 E continua ate que não sobre mais linhas lidas pelo MySqlDataReader.
Resultado obtido: Id: id1 Nome: id1 Email: id1 Id: nome1 Nome: nome1 Email: nome1
Sei que isso ocorre, pois o loop está sendo feito a partir da mesma linha e só prossegue para a próxima quando todas as colunas tenham sido mostradas, mas não sei como prosseguir daqui.
Segue código: Classe model Usuários:
public class Usuarios : Interfaces.ITabela
{
public int IdUsuarios { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
private List<string> Colunas { get; set; }
private List<string> Parametros { get; set; }
public Usuarios()
{
Parametros = new List<string>();
Parametros.Add("''");
Parametros.Add("@Nome");
Parametros.Add("@Email");
Colunas = new List<string>();
Colunas.Add("IdUsuarios");
Colunas.Add("Nome");
Colunas.Add("Email");
}
public List<string> GetParametros()
{
return Parametros;
}
public List<string> GetColunas()
{
return Colunas;
}
}
Classe de controle para ler os dados do banco de dados:
public interface ILerDados
{
List<string> Ler();
}
internal class LerDados : ILerDados
{
private readonly MySql.Data.MySqlClient.MySqlConnection conexao;
private readonly MySql.Data.MySqlClient.MySqlCommand comando;
private MySql.Data.MySqlClient.MySqlDataReader leitor;
private List<string> colunas;
public LerDados(List<string> colunas, string stringConexao, string query)
{
this.conexao = new MySql.Data.MySqlClient.MySqlConnection(stringConexao);
this.comando = new MySql.Data.MySqlClient.MySqlCommand(query, conexao);
this.colunas = colunas;
}
public List<string> Ler()
{
List<string> resultado = new List<string>();
conexao.Open();
try
{
using (comando)
{
leitor = comando.ExecuteReader();
while (leitor.Read())
{
foreach (string coluna in colunas)
{
resultado.Add(Convert.ToString(leitor[$"{coluna}"].ToString()));
}
}
}
return resultado;
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
Console.WriteLine("Erro no comando Ler.");
throw e;
}
catch (NullReferenceException e)
{
throw e;
}
finally
{
conexao.Close();
}
}
}
AQUI O PROBLEMA (foreach loop): Dao controller que pega o método Ler() e concatena com as colunas que existem na classe model Usuarios para formar uma tabela:
public IEnumerable<string> ComandoSelect()
{
query = $"SELECT * FROM {nomeTabela}";
Leitor = new LerDados(tabela.GetColunas(), stringConexao, query);
var resultado = new List<string>();
try
{
foreach (string linha in Leitor.Ler())
{
foreach (var coluna in tabela.GetColunas())
{
resultado.Add($"{coluna}: {linha}");
}
}
return resultado;
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
throw e;
}
}
Segue Program onde mostro em tela cada um dos itens na lista de retorno resultado do método ComandoSelect():
static void Main(string[] args)
{
var dadosTabela = new List<string>();
try
{
Dao.Dao usuarioDao = new Dao.Dao("usuarios");
Console.WriteLine("Tabela Usuarios");
foreach (var item in usuarioDao.ComandoSelect())
{
Console.WriteLine(item);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
finally
{
Console.ReadKey();
}
Agradeço quer puder ajudar!