Ir ao conteúdo
  • Cadastre-se

C# Como retornar um valores de um método ?


Nerociffer

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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;
    
}





 

Link para o comentário
Compartilhar em outros sites


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};");                                
}



 

Link para o comentário
Compartilhar em outros sites

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...