How to extract data from a SQL query in C #

2

I've been developing C # for a while now, so I'm still learning ... How do I extract the result data from the query done in the database?

public static DataTable ConsultaCidade()
{
    DataTable pDados = ExecutaSql.ConsultaBanco("SELECT * FROM tabela");
    for (int i = 0; i < pDados.Rows.Count; i++)
    {

    }
    return dados;
}
    
asked by anonymous 08.12.2017 / 19:09

4 answers

3

1-class connection

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient; //ADO.Net padrão para SqlServer
    using System.Configuration; //capturar o nome da connectionstring

    namespace DAL.Persistence
    {
        /// <summary>
        /// Classe para conexão com a base de dados
        /// </summary>
        public class Conexao
        {
            //declarar atributos..
            //protected -> somente pode ser acessado por herança
            protected SqlConnection Con;    //conexão com o banco de dados
            protected SqlCommand Cmd;       //executar comandos SQL
            protected SqlDataReader Dr;     //Ler dados de consultas 
            protected SqlTransaction Tr;    //Transações em banco de dados (commit/rollback)

            //declarar os metodos..
            protected void OpenConnection() //conexão...
            {
                Con = new SqlConnection(ConfigurationManager.ConnectionStrings["aula"].ConnectionString);
                Con.Open(); //conexão aberta!
            }

            protected void CloseConnection() //desconectar...
            {
                Con.Close(); //conexão fechada!
            }
        }
    }

2-CRUD using ADO

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient; //acesso ao sqlserver..
using DAL.Entity; //namespace das classes de entidade..

namespace DAL.Persistence
{
    /// <summary>
    /// Classe de persistencia para a entidade Cliente
    /// </summary>
    public class ClienteDal : Conexao
    {
        public void Insert(Cliente c)
        {
            try
            {
                OpenConnection(); //abrir conexão..
                Cmd = new SqlCommand("insert into Cliente(Nome, Email, Sexo, DataCadastro) values(@v1, @v2, @v3, GetDate())", Con);
                Cmd.Parameters.AddWithValue("@v1", c.Nome);
                Cmd.Parameters.AddWithValue("@v2", c.Email);
                Cmd.Parameters.AddWithValue("@v3", c.Sexo.ToString());
                Cmd.ExecuteNonQuery(); //executar..
            }
            catch (Exception e)
            {
                //lançar uma exceção para o projeto principal..
                throw new Exception("Erro ao inserir Cliente: " + e.Message);
            }
            finally
            {
                CloseConnection(); //fechar conexão..
            }
        }

        public void Update(Cliente c)
        {
            try
            {
                OpenConnection(); //abrir conexao
                Cmd = new SqlCommand("update Cliente set Nome = @v1, Email = @v2, Sexo = @v3 where IdCliente = @v4", Con);
                Cmd.Parameters.AddWithValue("@v1", c.Nome);
                Cmd.Parameters.AddWithValue("@v2", c.Email);
                Cmd.Parameters.AddWithValue("@v3", c.Sexo.ToString());
                Cmd.Parameters.AddWithValue("@v4", c.IdCliente);
                Cmd.ExecuteNonQuery(); //executar
            }
            catch(Exception e)
            {
                //lançar exceção..
                throw new Exception("Erro ao atuaalizar Cliente: " + e.Message);
            }
            finally
            {
                CloseConnection(); //fechar conexao
            }
        }

        public void Delete(int IdCliente)
        {
            try
            {
                OpenConnection(); //abrir conexão..
                Cmd = new SqlCommand("delete from Cliente where IdCliente = @v1", Con);
                Cmd.Parameters.AddWithValue("@v1", IdCliente);
                Cmd.ExecuteNonQuery(); //executar..
            }
            catch(Exception e)
            {
                throw new Exception("Erro ao excluir Cliente: " + e.Message);
            }
            finally
            {
                CloseConnection(); //fechar conexão..
            }
        }


        public Cliente FindById(int IdCliente)
        {
            try
            {
                OpenConnection(); //abrir conexão..

                Cmd = new SqlCommand("select * from Cliente where IdCliente = @v1", Con);
                Cmd.Parameters.AddWithValue("@v1", IdCliente);
                Dr = Cmd.ExecuteReader();

                //verificar se o DataReader obteve algum registro..
                if(Dr.Read()) //verificando se o DataReader obteve algum registro..
                {
                    Cliente c = new Cliente(); //classe de entidade...
                    c.IdCliente = Convert.ToInt32(Dr["IdCliente"]);
                    c.Nome = Convert.ToString(Dr["Nome"]);
                    c.Email = Convert.ToString(Dr["Email"]);
                    c.Sexo = (Sexo) Enum.Parse(typeof(Sexo), Convert.ToString(Dr["Sexo"]));
                    c.DataCadastro = Convert.ToDateTime(Dr["DataCadastro"]);

                    return c; //retornar o cliente..
                }
                else
                {
                    return null; //retornar vazio..
                }
            }
            catch(Exception e)
            {
                //lançar exceção..
                throw new Exception("Erro ao obter Cliente: " + e.Message);
            }
            finally
            {
                CloseConnection(); //fechar conexao..
            }
        }

        public List<Cliente> FindAll()
        {
            try
            {
                OpenConnection(); //abrir conexão..
                Cmd = new SqlCommand("select * from Cliente", Con);
                Dr = Cmd.ExecuteReader(); //executa a consulta e le os registros..

                List<Cliente> lista = new List<Cliente>(); //lista vazia..

                //enquanto houver registros na consulta..
                while(Dr.Read())
                {
                    Cliente c = new Cliente();

                    c.IdCliente = Convert.ToInt32(Dr["IdCliente"]);
                    c.Nome = Convert.ToString(Dr["Nome"]);
                    c.Email = Convert.ToString(Dr["Email"]);
                    c.Sexo = (Sexo) Enum.Parse(typeof(Sexo), Convert.ToString(Dr["Sexo"]));
                    c.DataCadastro = Convert.ToDateTime(Dr["Datacadastro"]);

                    lista.Add(c); //adicionar o cliente dentro da lista..
                }

                return lista; //retornar a lista..
            }
            catch(Exception e)
            {
                throw new Exception("Erro ao listar Clientes: " + e.Message);
            }
            finally
            {
                CloseConnection(); //fechar conexão..
            }
        }

    }
}

3- entity used

public class Cliente
{
    public int IdCliente { get; set; }
    public string Nome { get; set; }
    public string Email { get; set; }
    public Sexo Sexo { get; set; }
    public DateTime DataCadastro { get; set; }
}


public enum Sexo
{
    Masculino,
    Feminino
}
    
08.12.2017 / 19:36
0

What I needed was to extract the data from the query and assign it to variables. I did the following, but I do not think it's the best. I accept suggestions for improvement.

for (int i = 0; i < pDados.Rows.Count; i++)
{
    var c = pDados.Rows;
    var d = c[i];
    var cod = d.ItemArray[0];
    var cidade = d.ItemArray[1];
    var estado = d.ItemArray[2];
    teste.Rows.Add(new object[] { cod, cidade, estado });
}
    
11.12.2017 / 13:08
0
using System.Data.SQLite;       
SQLiteConnectionm_dbConnection = new SQLiteConnection("Data Source=../../sqLite/" +
"NomeBaseDados" + ".sqlite;Version=3;");      

SQLiteCommand sqCommand = (SQLiteCommand)m_dbConnection.CreateCommand();

sqCommand.CommandText = "SELECT r1.codigo AS cod, r1.descricao AS cidade, r2.descricao AS estado FROM recurso r1 JOIN hierarquia h1 ON h1.recurso = r1.codigo AND r1.empresa = h1.empresa JOIN recurso r2 ON h1.recursopai = r2.codigo WHERE r1.tipo = 'CID' AND r1.empresa = '01' AND h1.visao = 'PRI' ORDER BY h1.recursopai";

using (SQLiteDataReader rdr = sqCommand.ExecuteReader())
{
   while (rdr.Read())
   {
      variavelqueguardaodado = rdr["nome_coluna"].ToString();
   }
}
    
11.12.2017 / 13:11
0
//Aqui usamos a palavra chave 'using' como uma diretiva, para importar os tipos definidos nas namespaces abaixo.

using System.Data;           //-->namespace q fornece a classe DataTable.  
using System.Data.SqlClient; //-->namespace q fornece as classes SQL.
using System.Windows.Forms;  //-->namespace q fornece recursos visuais do windows(usaremos a classe MessageBox).


public SqlConnection Conexao;     //-->Variável responsável pela conexão com a DB.
public SqlDataAdapter Adaptador;  //-->Variável responsável pela consulta na DB.
public DataTable Tabela;          //-->Variável responsável pelo armazenamento dos dados.

string strConexao = "Seu endereco da conexao";    //-->Variável responsável pelo Endereço da Conexão.
string strConsulta = "SELECT * FROM suatabela";   //-->Variável que define a consulta.

//Método responsável por conectar - consultar, retornando uma tabela com os dados solicitados.
public DataTable ObterTabela(){
try{
  Tabela = new DataTable();                             //--> Aqui nós instanciámos uma nova tabela.
  Conexao = new SqlConnection(strConexao);              //-->Aqui nós instanciámos uma nova conexão, passando o endereço como argumento.
  Adaptador = new SqlDataAdapter(strConsulta, Conexao); //-->Aqui nós instanciámos nosso Adaptador com a string da consulta e a Conexão já instanciada.  
  Adaptador.Fill(Tabela);                               //-->Aqui nós usamos o método Fill da classe SqlDataAdapter, para preencher nossa tabela.

  return Tabela; //Se o strConexao estiver correta e a strConsulta tbm, retornamos a tabela alimentada com os dados do SELECT.
}
catch(SqlException ex){ //Caso ocorra um erro como descrito acima, o bloco Catch entra em ação.
   MessageBox.Show($"Ocorreu um erro: {ex.message}"); //onde essa ação retorna visualmente para você a descrição do erro.
}
finally{ //e para finalizar, verificamos se a Conexão encontra-se aberta.
   if(Conexao.ConnectionState != ConnectionState.Closed){
      Conexao.Close() //se sim fechamos.
   }
}
}

With the Method described above you can feed a DataGridView between 'N' possibilities.

DataGridView grid = new DataGridView();
grid.DataSource = ObterTabela();

Here is an example of a SQL Connection String.

Default:

string strConexão = "Server=CaminhoDoSeuServidor;
                     Database=NomeDoSeuBanco;
                     User Id=NomeDeUsuarioDeAcessoAoServer;
                     Password=SenhaDeAcessoAoServer;";

Using a SQLLocalDB

string strConexão = "Server=.\SQLExpress;
                     AttachDbFilename=CaminhoDoSeuArquivoDB; 
                     Database=NomeDaSuaDB;
                     Trusted_Connection=Yes;";
    
08.12.2017 / 21:58