Ir ao conteúdo

Posts recomendados

Postado

Olá, boa tarde pessoal.

Gostaria de saber se posso retornar de uma classe dois ou mais valores de um método.

Meu caso é esse, tenho uma classe Acesso ao banco de dados, que recebe uma string com um comando, exemplo "select * from clientes where = '?'" vinda de uma classe com o metodo "buscar", esse metodo é chamado de ExecutarComando, ele dá o select no banco, porém preciso retornar os dados do select para a classe Buscar, são varios dados, nao posso colocar tudo em uma classe só pois quebraria a lógica de 3 camadas do padrão DAO.
 

public void Buscar(CadastroClienteDTO dto)
        {
            bd.Conectar();
            string comando1 = "select c.nome, c.telefone, c.email, a.rua, a.numero, a.complemento, a.bairro, a.cidade, a.uf, a.cep, p.cpf  from cliente c join endereco a on c.idCliente = a.cliente_idCliente join pessoafisica p on a.cliente_idCliente where cpf = '"+dto.ClienteCPF+"')";
            bd.ExecutaEretornaReader(comando1);


            dto.ClienteNome =  
        }

o código acima está incompleto, pertence a classe que tem os métodos para buscar, excluir e incluir dados no BD.

public void ExecutaEretornaReader(string comandoSql)
        {
            MySqlCommand comando = new MySqlCommand(comandoSql, objcon);
            comando.CommandType = CommandType.Text;
            dr = comando.ExecuteReader();
            dr.Read();
        }

Acima a classe que pega a string de conexão e executa, sendo dr um MySqlDataReader e o objcon um MySqlConnection

 

Como faço para minha classe que faz a busca receber os dados do comando reader ? lembrando, são vários dados

  • Curtir 1
Postado

Se eu Entendi sua pergunta você quer um jeito de receber o resultado de um query, mas Não pode usar uma classe como Modelo para os mesmos(ex: Classe Funcionário, propriedades ID,Nome e etc) é isso que você quer?  Não entendi esse Padrão DAO, mas existem vários jeitos(e exemplos) de como fazer isso.

Isso Serve?

//namespaces usados 
using System.Collections.Generic;
using System.Text;

//mudei o tipo para retornar a lista depois

public List<string> ExecutaEretornaReader(string comandoSql)
{
    //o using chama o método dispose do objeto automaticamente
    //então usando ele por segurança
    using(MySqlCommand comando = new MySqlCommand(comandoSql, objcon))
    {

        comando.CommandType = CommandType.Text;
        using(dr = comando.ExecuteReader())
        {

        	//o código abaixo deve ser o que você realmente quer...
        	//---------------------------------
        	//---------------------------------
        	//Coleção para  receber os dados 
        	List<string> DataList = new List<string>(); 
        	//enquanto tiver linhas para serem lidas
        	while(dr.Read())
        	{
            	//Objeto String Builder para Montar as informações
            	//GetString pega o texto da coluna especificada         
            	StringBuilder StringRow = new StringBuilder();
        
            	StringRow.AppEnd(String.Format($"{GetString(0)} - "); // Nome
            	StringRow.AppEnd(String.Format($"{GetString(1)} - "); // Telefone
            	StringRow.AppEnd(String.Format($"{GetString(2)} - "); // Email
            	StringRow.AppEnd(String.Format($"{GetString(3)} - "); // Rua
            	StringRow.AppEnd(String.Format($"{GetString(4)} - "); // Numero
            	StringRow.AppEnd(String.Format($"{GetString(5)} - "); // Complemento
            	StringRow.AppEnd(String.Format($"{GetString(6)} - "); // Bairro
            	StringRow.AppEnd(String.Format($"{GetString(7)} - "); // Cidade
            	StringRow.AppEnd(String.Format($"{GetString(8)} - "); // UF
            	StringRow.AppEnd(String.Format($"{GetString(9)} - "); // CEP
            	StringRow.AppEnd(String.Format($"{GetString(10)} - "); // CPF
            	/*sb.AppEnd(String.Format($"{GetInt32(?)} - ");  caso precise pegar o ID, basta colocar o indice da coluna do mesmo */
            	DataList.Add(stringRow);
        	}
        	//fechando o leitor
        	dr.Close();
        }
        
    }
    //pra Garantir que o Comando pare
    Comando.Close();
    //retornando a Collection com os dados
    return DataList;
    
}





 

Postado


Isso pode ser feito com um Foreach.

	//percorre cada item de uma coleção
	
	foreach(var item in Lista)
	{
      	//se não estiver claro pense nisso "para cada item na lista, faça..."
      	//defina o que for fazer
  		string MyVar = item;
	}

Outra opção seria mudar um pouco a lógica, para conseguir manipular as informações mais facilmente.
classe Modelo:

public class Pessoa
{    
    public string Nome { get; set; }
    public string Telefone { get; set; }
    public string Email { get; set; }
    public string Rua { get; set; }
    public string Numero { get; set; }
    public string Complemento { get; set; }
    public string Bairro { get; set; }
    public string Cidade { get; set; }
    public string UF { get; set; }
    public string CEP { get; set; }
    public string CPF { get; set; }    
}

E a lógica de antes só mudaria no While

			//Mudando o Tipo da coleção 
        	List<Pessoa> DataList = new List<Pessoa>();             
        	//enquanto tiver linhas para serem lidas, vai executar, lógica continua a mesma aqui, mas...
        	while(dr.Read())
        	{
                //aqui muda            	  
            	DataList(new Pessoa()
                {
                    Nome = dr.GetString(0),
                    Telefone = dr.GetString(1),
                    Email = dr.GetString(2),
                    Rua = dr.GetString(3),
                    Numero = dr.GetString(4),
                    Complemento = dr.GetString(5),
                    Bairro = dr.GetString(6),
                    Cidade = dr.GetString(7),
                    UF = dr.GetString(8),
                    CEP = dr.GetString(9),
                    CPF = dr.GetString(10)
                });
              	//dessa maneira, cada item da lista pode ser manipulado mais facilmente
              	//é tambem um código mais reutilizavel e Gerenciavel. 
            	
        	}
              //restante se mantem

Depois, pode realizar as operações mais facilmente:

foreach(var item in DataList)
{
 //faça o que preferir
 string selectStr = String.Format($"SELECT {item.Nome} FROM NomeTabela;");
 string updateStr = String.Format($"UPDATE NomeTabela SET nome = {item.Nome};");                                
}



 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!