How to select the contents of a column from a DataSet C #

0

Is there a better way to fetch the contents of a specific column? I have information that is repeated in a "template" column I want to retrieve this content only once. I'm doing this, but maybe it has a better way to do it.

        public DataSet get()
        {
            OleDbConnection conn = new OleDbConnection(Conexao.getConexao());
            conn.Open();
            OleDbDataAdapter da = new OleDbDataAdapter("Select Codigo as Codigo, Nome as Nome,modelo, Cargo as Cargo, Empresa as Empresa From funcionarios", conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }

   private void exibirDados()
    {
        try
        {
            funcionarios funci = new funcionarios();
            DataSet ds = funci.get();
            dgvDados.DataSource = ds.Tables[0];
            string retorno = ConteudoColuna("modelo",ds);
        }
        catch
        {
            throw;
        }
    }

    private string ConteudoColuna(string nomeColuna, DataSet table)
    {
        DataTable recebeTable = table.Tables[0];

        foreach (DataColumn column in recebeTable.Columns)
        {

            if (column.ToString() == nomeColuna)
            {
                string teste2 = column.ToString();
                return column.ToString();
            }

        }
        return  "";
    }
    
asked by anonymous 04.07.2018 / 03:26

1 answer

1
  

Is there a better way to fetch the contents of a specific column?

Yes, if you already have the name of the column, just do: row["modelo"].ToString(); or could only do ds.Tables[0].Rows[0]["modelo"].ToString(); which also works (as long as no collection is empty), but this is the least of the problems ...

The first step is to define what is a Funcionario in a class "LITTLE" :

public class Funcionario
{
    public int Id {get;set;}
    public string Nome {get;set;}
    public string Modelo {get;set;}
}

So, you could do your Get, using the typed object:

public List<Funcionario> GetFuncionarios() //O Método retorna uma coleção de Funcionarios
{
    List<Funcionario> funcionarios = new List<Funcionario>();

    using (OleDbConnection conexao = new OleDbConnection("string conexao")) //utilizar uma conexão dentro de um bloco using, pra ser descartado após o bloco.
    {
        conexao.Open();

        using (OleDbCommand cmd = new OleDbCommand("select id, nome, modelo from funcionarios"))
        {
            using (OleDbDataReader dr = cmd.ExecuteReader()) //O Data reader, vai lendo linha a linha e preenchendo a coleção. Se usar um DataAdapter com fill, ele primeiro seleciona tudo, e depois preenche o DataSet de uma vez (mais lento)
            {
                while (dr.Read()) //Enquanto estiver lendo...
                {
                    //vai adicionando funcionários...
                    funcionarios.Add(new Funcionario() 
                    { 
                       Id = dr.GetInt32(0),
                       Nome = dr.GetString(1),
                       Modelo = dr.GetString(2)
                    });
                }

            }
        }
        conexao.Close(); //fecha a conexão...
    }


    return funcionarios; //retorna a lista.

}

And then fetch / filter / display the data:

//Selecionando todos os funcionários
List<Funcionario> funcionarios = d.GetFuncionarios();


//Selecionando um funcionário
Funcionario f1 = funcionarios.Where(x => x.Id == 1).FirstOrDefault();


//Filtrando funcionários que começam com a letra A
List<Funcionario> filtrados = funcionarios.Where(x=> x.Nome.StartsWith("A")).ToList();


//Depois você pode usar essas lista como source do DataGridView:
//dataGridView1.DataSource = filtrados;

//Buscar apenas o Modelo do primeiro registro
string modelo = funcionarios.First().Modelo;

Although it does not run (no database), I put it in SQLFiddle

    
04.07.2018 / 04:29