none
Classe que retorna o valor de uma consulta SQL RRS feed

  • Pergunta

  • Caros, bom dia!


    Um colega do forum já me ajudou anteriormente porém preciso de mais uma ajuda:

    Abaixo é uma classe que executa uma consulta SQL porém preciso de pegar um valor nessa consulta:

    A consulta ira retorna somente um valor e quero que minha string fique com esse valor e como eu pego valor da string no page_load quando utilizar essa classe?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Sql;
    using System.Data.SqlClient;
    
    public static class SQL_CLASSE
    {
        static  SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LiveConnectionString"].ToString());
    
        public static bool ExecutarQuery(string query, string resultado_query)
        {
           bool sucesso = false;
    
           SqlCommand cmd = new SqlCommand(query, con);
          
    
           try
           {
               con.Open();
               cmd.ExecuteNonQuery();
               PASSAR O RESULTADO PARA A MINHA STRING;
               sucesso = true;
           }
           finally
           {
               con.Close();  
           } 
    
           return sucesso;
        }
    }

    segunda-feira, 29 de abril de 2013 13:59

Respostas

  • Olá,

    Apesar de não achar a melhor foma, aqui fica:

    public static string[] ExecutarQuery(string query, List<string> colunas)
    {
        List<string> c = new List<string>();
        c.AddRange(colunas);
    
        string[] resultados = new string[c.Count];
    
        SqlCommand cmd = new SqlCommand(query, con);
        SqlDataReader reader = null;
    
        int indice = 0;
    
        try
        {
            con.Open();
            cmd.ExecuteReader();
            reader = cmd.ExecuteReader();
            
            while (reader.Read()) 
            {
                for(i=0;i<c.Count;i++)
                {
                    resultados[indice] = (reader[c[i]].ToString());
                }
                indice++;
            }      
        }
        finally
        {
            con.Close();  
        }
    
        return resultados;  //se não der tente resultados[];
    }

    Como usar:

    string query = "SELECT...";
    
    List<string> colunas = new List<string>();
    
    colunas.Add("Coluna1");
    colunas.Add("Coluna2");
    colunas.Add("Coluna3");
    colunas.Add("Coluna4");
    
    string[] valores = SQL_CLASSE.ExecutarQuery(query, colunas);
    
    for(i=0;i<valores.Count;i++)
    {
        MessageBox.Show(valores[i]);
    }

    Bem em princípio isso irá funcionar.

    Eu não testei o código, mas teste e dê retorno.

    Cumpz, ADAE.

    terça-feira, 30 de abril de 2013 19:53

Todas as Respostas

  • Olá,

    Deixe o parâmetro setado como out para você poder pegar o valor no local que chamar o método, e utilize o método ExecuteScalar() para pegar o retorno do select ( só serve para um valor ):

    public static class SQL_CLASSE
    {
        static  SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LiveConnectionString"].ToString());
    
        public static bool ExecutarQuery(string query, out string resultado_query)
        {
           bool sucesso = false;
    
           SqlCommand cmd = new SqlCommand(query, con);
          
    
           try
           {
               con.Open();
               resultado_query = cmd.ExecuteScalar().ToString();
               sucesso = true;
           }
           finally
           {
               con.Close();  
           } 
    
           return sucesso;
        }
    }

    segunda-feira, 29 de abril de 2013 14:23
  • Olá, 

    Só não entendi como pegar o valor:

     protected void Button1_Click(object sender, EventArgs e)
        {
            string resultado = "0"; aqui quero o valor
            
            string query = "select alguma coisa";
            SQL_CLASSE.ExecutarQuery(query, é AQUI que pego o valor?  = resultado );
           
        }

    segunda-feira, 29 de abril de 2013 14:38
  • Olá,

    Aqui deixo um exemplo de como poderá fazê-lo (acrescente este método à sua Classe):

    public static DataTable ExecutaQuery(string query)
    {
        DataTable dt = new DataTable();
    
        try
        {
            con.Open();
            SQLiteCommand cmd = new SQLiteCommand(query, con);
            SQLiteDataReader reader = cmd.ExecuteReader();
            dt.Load(reader);
            reader.Close();
        }
        finally
        {
            con.Close();
        }
    
        return dt;
    }

    Como usar:

    string query = "SELECT Nome, Numero FROM Tabela";
    
    DataTable dt = SQL_CLASSE.ExecutaQuery(query); //Carrega o DataTable
    
    foreach (DataRow row in dt.Rows) //Percorrer as linhas carregadas
    {
        MessageBox.Show("Nome: " + row[0] + Environment.NewLine + "Numero: " + row[1].ToString());
    }

    Cumpz, ADAE.


    • Editado AD_AE segunda-feira, 29 de abril de 2013 15:20
    segunda-feira, 29 de abril de 2013 15:19
  • ADAE, sua solução é interessante e provavelmente usarei e outro cenário , 

    Poderia me nesse codigo, eu fiz um teste porem nao consigo pegar o valor em outras paginas.

     public static bool  ExecutarQuery(string query, string Coluna)
        {
           bool sucesso = false;
    
           SqlCommand cmd = new SqlCommand(query, con);
           SqlDataReader reader = null;
           string SQL_VALUE = Coluna;
           string retorno;
    
           try
           {
               con.Open();
               //cmd.ExecuteNonQuery();
               reader = cmd.ExecuteReader();
                 while (reader.Read())
                  
    
               retorno = (reader[SQL_VALUE].ToString()); quero saber como pegar isso no page load
               //cmd.ExecuteReader();
               sucesso = true;
               
             
           }
           finally
           {
               con.Close();  
           }
    
           return sucesso;
        }

    terça-feira, 30 de abril de 2013 14:09
  • Olá,

    Esse método está errado. 

    Antes de mais, esse resultado seria o que? Um "SELECT COUNT"?

    Pois se vc fizer uma query que retorne mais que uma linha, como vc pensa que vai retornar essas linhas? Poste sua query que depois retorno.

    #EDIT

    Qual será o tipo de dados retornado? vai tratar sempre como string?

    Cumpz, ADAE.


    • Editado AD_AE terça-feira, 30 de abril de 2013 14:53
    terça-feira, 30 de abril de 2013 14:52

  • Entendi e é isso mesmo!

    Esse método é para consulta com uma linha, talvez mais de uma campo ou melhorar esse metodo.

    Será sempre uma query do tipo:

    Select  nome from cliente where id=1

    ou 

    Select count 

    O objetivo é sempre chamar essa essa classe para executar uma query e depois uma consulta pois na mesma string posso fazer diversas querys (Procedure, insert, view)


    terça-feira, 30 de abril de 2013 16:49
  • Olá,

    Apesar de não achar a melhor foma, aqui fica:

    public static string[] ExecutarQuery(string query, List<string> colunas)
    {
        List<string> c = new List<string>();
        c.AddRange(colunas);
    
        string[] resultados = new string[c.Count];
    
        SqlCommand cmd = new SqlCommand(query, con);
        SqlDataReader reader = null;
    
        int indice = 0;
    
        try
        {
            con.Open();
            cmd.ExecuteReader();
            reader = cmd.ExecuteReader();
            
            while (reader.Read()) 
            {
                for(i=0;i<c.Count;i++)
                {
                    resultados[indice] = (reader[c[i]].ToString());
                }
                indice++;
            }      
        }
        finally
        {
            con.Close();  
        }
    
        return resultados;  //se não der tente resultados[];
    }

    Como usar:

    string query = "SELECT...";
    
    List<string> colunas = new List<string>();
    
    colunas.Add("Coluna1");
    colunas.Add("Coluna2");
    colunas.Add("Coluna3");
    colunas.Add("Coluna4");
    
    string[] valores = SQL_CLASSE.ExecutarQuery(query, colunas);
    
    for(i=0;i<valores.Count;i++)
    {
        MessageBox.Show(valores[i]);
    }

    Bem em princípio isso irá funcionar.

    Eu não testei o código, mas teste e dê retorno.

    Cumpz, ADAE.

    terça-feira, 30 de abril de 2013 19:53