none
Consulta em banco a partir do sistema demorada RRS feed

  • Pergunta

  • Boa noite caros colegas, tenho uma classe que realiza um crud. Tal classe funciona perfeitamente no SQL Server, ou seja, a performance no SQL Server é consideravelmente boa, visto que desenvolvi a mesma para trabalhar em ambiente web. Porem, precisei adequar esta classe para conexão com o banco Mysql, porem o desempenho dela piorou cerca de 200%.

    Por exemplo:

    Tenho uma tabela para fins de teste cujo a mesma tem alguns nomes de usuários. Há exatamente 15 registros  simbólicos nesta tabela, porem se eu fizer um select * from usuario nesta tabela, o sistema demora em media de 2.43 segundos para retornar esses 15 registros.

    Alguém pode me dar alguma dica para melhorar esta performance???

    Detalhe, realizei estes testes em 2 servidores de bancos de dados diferentes.

    1º Servidor: Core i5 2.4Ghz 6GB de Ram.

    2º Servidor: Core 2 2.8Ghz Duo 4Gb de Ram

    --Segue a classe

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Xml;

    namespace ComandoMySQL
    {
        public class db
        {
            public string Server;
            public string Database ;
            public string Uid;
            public string Pwd ;
            public string Encrypt ;
            public string Port;


            public List<db> RetornarDB()
            {
                List<db> list = new List<db>();

                db _db = null;
                try
                {
                    XmlDocument document = new XmlDocument();
                    document.Load(Directory.GetCurrentDirectory() + "\\config.xml");
                    XmlNodeList _xmlreader = document.GetElementsByTagName("connection");

                    foreach (XmlNode ob in _xmlreader)
                    {
                        _db = new db();

                        _db.Server = ob["Server"].InnerText;
                        _db.Database = ob["Database"].InnerText;
                        _db.Uid = ob["Uid"].InnerText;
                        _db.Pwd = ob["Pwd"].InnerText;
                        _db.Encrypt = ob["Encrypt"].InnerText;
                        _db.Port = ob["Port"].InnerText;

                        list.Add(_db);
                    }
                    return list;
                }
                catch (XmlException ex)
                {
                    throw ex;
                }
            }
        }
    }

    ---------------------------------------------------------------------------------------

    using MySql.Data.MySqlClient;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Text;

    namespace ComandoMySQL
    {
        /// <summary>
        /// Classe Responsavel por manipular dados do MySQL.
        /// </summary>
        public class ComandoMySQL
        {
            string conexaoBD = null;
            MySqlCommand cmd = null;
            MySqlConnection cnn = null;
            MySqlDataReader dr = null;
            IDataReader IReader = null;
            MySqlDataAdapter da = null;
            DataSet ds = null;
            DataTable dt = null;

           /// <summary>
            /// Função que realiza a conexao com o banco de dados
           /// </summary>
            public void MontarSringSQL()
            {
                db _db = new db();
                foreach (db ob in _db.RetornarDB())
                {
                    conexaoBD = "Server=" + ob.Server + ";" +
                                "Port=" + ob.Port + ";" +
                                "Database=" + ob.Database + ";" +
                                     "Uid=" + ob.Uid + ";" +
                                     "Pwd=" + ob.Pwd + ";";
                    //conexaoBD = "Data Source=" + nomeServidorBancoDados + "\\" + nomeInstanciaBancoDados + ";Initial Catalog=" + nomeBancoDados + ";Persist Security Info=True;User ID=" + nomeUsuarioBancoDados + ";Password=" + senhaBancoBancoDados;
                }
            }     
            
            /// <summary>
            /// Construtor vazio
            /// </summary>
            public ComandoMySQL()
            {
                
            }

            /// <summary>
            /// Realiza abertura do Banco de dados
            /// </summary>
            /// <returns>Retorna um elemento do tipo SqlConnection cotendo os dados da conexao</returns>
            private MySqlConnection AbrirBanco()
            {            
                try
                {
                    MontarSringSQL();
                    cnn = new MySqlConnection(conexaoBD);
                    cnn.Open();
                }
                catch (MySqlException ex)
                {
                    throw ex;
                }
                return cnn;
            }

            private void DestruirObjeto()
            {
                cmd.Dispose();
                cnn.Dispose();
                 dr.Dispose();
                 IReader.Dispose();
                 da.Dispose();
                 ds.Dispose(); 
                 dt.Dispose() ;
            }

            /// <summary>
            /// Realiza o fechamento seguro da conexao com o banco.
            /// </summary>
            /// <param name="cnn">Deve-se informar um parametro do tipo SqlConnection</param>
            private void FecharBanco(MySqlConnection cnn)
            {
                if (cnn.State == ConnectionState.Open)
                    try
                    {
                        cnn.Close();
                        //DestruirObjeto();                    
                    }
                    catch (MySqlException ex)
                    {
                        throw ex;
                    }
            }

            /// <summary>
            /// Método que executa os comandos em SQL, como Select Insert, Update, Delete
            /// </summary>
            /// <param name="sql">Passa-se uma string no formato em SQL ( {Insert into}--{Update set}--{Delete from}</param>
            /// <returns>Retorna-se um elemento do tipo SqlCommand</returns>
            private MySqlCommand ExecutarSQL(string sql)
            {
                //Tratamento de erros
                try
                {
                    cnn = AbrirBanco();
                    cmd = new MySqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandText = sql.ToString();
                    //cmd.CommandType = CommandType.Text;
                   
                }
                //Caso ocorra algum erro, o metodo catch irá informar qual o erro
                catch (MySqlException ex)
                {
                    //Retorna o erro apontado
                    throw ex;
                }
                return cmd;
            }

            /// <summary>
            /// Método que executa os comandos em SQL, como Insert, Update, Delete     
            /// </summary>
            /// <param name="sql">Passa-se uma string no formato em SQL ( {Insert into}--{Update set}--{Delete from}</param>
            public void SQL(string sql)
            {
                if (sql != string.Empty)
                {
                    try
                    {
                        ExecutarSQL(sql).ExecuteNonQuery();
                    }
                    catch (MySqlException ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        FecharBanco(cnn);
                    }
                }
            }

            /// <summary>
            /// Método que realiza consultas no banco de dados e retorna os resultados para  o formulário
            /// </summary>
            /// <param name="sql">Passa-se uma string no formato em SQL </param>
            /// <returns>Retorna-se um elemento do tipo DataSet</returns>
            public DataSet RetornarDataSet(string sql)
            {
                if (sql != string.Empty)
                {
                    try
                    {
                        //Passa como paramentro a função que realiza a execução das querys. 
                        da = new MySqlDataAdapter(ExecutarSQL(sql));
                        //Inicializa o DataSet
                        ds = new DataSet();
                        //Passa para o SqlDataAdapter o DataSet como Paramentro
                        da.Fill(ds);
                    }
                    catch (MySqlException ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        FecharBanco(cnn);
                    }
                }
                //Retorna para o Metodo invocador o DataSet Montado
                return ds;
            }

            /// <summary>
            /// Método que realiza consultas no banco de dados e retorna os resultados para  o formulário
            /// </summary>
            /// <param name="sql">Passa-se uma string no formato em SQL </param>
            /// <returns>>Retorna-se um elemento do tipo DataTable</returns>
            public DataTable RetornarDataTable(string sql)
            {
                if (sql != string.Empty)
                {
                    try
                    {
                        dt = new DataTable();
                        da = new MySqlDataAdapter(ExecutarSQL(sql));
                        da.Fill(dt);
                    }
                    catch (MySqlException ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        FecharBanco(cnn);
                    }
                }
                return dt;
            }

            /// <summary>
            /// Método que realiza consultas no banco de dados e retorna os resultados para  o formulário
            /// </summary>
            /// <param name="sql">Passa-se uma string no formato em SQL </param>
            /// <returns>Retorna-se um elemento do tipo IDataReader</returns>
            public IDataReader RetornarIDataReader(string sql)
            {
                if (sql != string.Empty)
                {
                    try
                    {
                        //Passa para o IReader o resultado da consulta SQL
                        IReader = ExecutarSQL(sql).ExecuteReader();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
                //Retorna para o Metodo invocador o DataSet Montado
                return IReader;
            }
        }
    }

    quinta-feira, 5 de novembro de 2015 02:41

Respostas

  • @Nelson_lucas

    Verefiquei o teu codigo....

    Porque isto:   public IDataReader RetornarIDataReader(string sql)?

    Voce tem interface? So se usa IDataReader quando se programa com interface. 

    Usa-se interface quando se programa em groupo...fica facil de "honrar o contracto"...

    Tu tens muitos codigos a fazer a mesma coisa....Tu esta a programar em camadas( N-tier)?


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:40
    quinta-feira, 5 de novembro de 2015 10:59
    Moderador
  • Quando voce usa sqlserver quanto tempo leva pra trazer a informacao?

    Pode ser problema relacionado com MySqlserver e nao com o teu codigo...


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:40
    quinta-feira, 5 de novembro de 2015 13:25
    Moderador
  • Muda este codigo 

    private void FecharBanco(SqlConnection cnn)
            {
                if (AbrirBanco().State == ConnectionState.Open)
                    try
                    {
                        AbrirBanco().Close();                   
                    }
                    catch (SqlException ex)
                    {
                        throw ex;
                    }
            }


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Sugerido como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:02
    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:40
    quinta-feira, 5 de novembro de 2015 14:36
    Moderador
  • Amigo ao retornar o datatable desabilite as Constraints

    sua_data_table.EnforceConstraints = false;

    Dessa forma ira o sistema não irá fazer as validações da chaves e terá um load mais rápido!



    *****************************************************
    Rafael Almeida Programador Sênior - JAMSOFT Sistemas
    rafaelalmeida@jamsoft.com.br
    www.jamsoft.com.br
    *****************************************************
    Asp.Net 5 Vnext, C# 6, Entity Framework e SQL Server
    *****************************************************

    sábado, 7 de novembro de 2015 23:35
  • A forma em que tu programa ja nao se usa muito...

    Troca isto pra isto:

            MySqlCommand cmd {get; set;} 
            MySqlConnection cnn {get; set;}
            MySqlDataReader dr {get; set;}
            MySqlDataAdapter {get; set;}
            DataSet ds {get; set;}
            DataTable dt {get; set;}

    este codigo deveria usar Using

      private MySqlCommand ExecutarSQL(string sql)
            {
                //Tratamento de erros
                try
                {

    Using (

    codigo aki

    )            }
                //Caso ocorra algum erro, o metodo catch irá informar qual o erro
                catch (MySqlException ex)
                {
                    //Retorna o erro apontado
                    throw ex;
                }
                return cmd;
            }

    Acho que a tua conecao atrasa...


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Nelson_lucas quarta-feira, 11 de novembro de 2015 23:30
    sexta-feira, 6 de novembro de 2015 14:08
    Moderador
  • Amigo ao retornar o datatable desabilite as Constraints

    sua_data_table.EnforceConstraints = false;

    Dessa forma ira o sistema não irá fazer as validações da chaves e terá um load mais rápido!



    *****************************************************
    Rafael Almeida Programador Sênior - JAMSOFT Sistemas
    rafaelalmeida@jamsoft.com.br
    www.jamsoft.com.br
    *****************************************************
    Asp.Net 5 Vnext, C# 6, Entity Framework e SQL Server
    *****************************************************

    Opa, aceito sua dica!!!

    Pessoal, problema resolvido, as dicas acima foram utilizadas e fico agradecido pela ajuda.

    Problema: Lentidão ao realizar consultas

    Solução:

    1º - Upgrade no banco de dados. A versão instalada era a Mysql v5.5 e foi atualizada para 5.7.

    2º Alteração do collation da base de dados que se encontrava errada.

    Apos estas alterações, as consultas estão retornando em 0.231 s. 

    Muito obrigado pelas dicas e pelo empenho em ajudar pessoal. Fica a dica: "Ao criar uma base de dados, verifiquem o collation pois isso influencia muito na questão de desempenho."

    • Marcado como Resposta Marcos SJ sexta-feira, 13 de novembro de 2015 13:30
    quarta-feira, 11 de novembro de 2015 23:30

Todas as Respostas

  • @Nelson_lucas

    Verefiquei o teu codigo....

    Porque isto:   public IDataReader RetornarIDataReader(string sql)?

    Voce tem interface? So se usa IDataReader quando se programa com interface. 

    Usa-se interface quando se programa em groupo...fica facil de "honrar o contracto"...

    Tu tens muitos codigos a fazer a mesma coisa....Tu esta a programar em camadas( N-tier)?


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:40
    quinta-feira, 5 de novembro de 2015 10:59
    Moderador
  • Sim, implementei esta classe para trabalhar em camadas. O que vocês me recomendam para melhorar esta rotina?
    quinta-feira, 5 de novembro de 2015 13:01
  • Quando voce usa sqlserver quanto tempo leva pra trazer a informacao?

    Pode ser problema relacionado com MySqlserver e nao com o teu codigo...


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:40
    quinta-feira, 5 de novembro de 2015 13:25
    Moderador
  • Muda este codigo 

    private void FecharBanco(SqlConnection cnn)
            {
                if (AbrirBanco().State == ConnectionState.Open)
                    try
                    {
                        AbrirBanco().Close();                   
                    }
                    catch (SqlException ex)
                    {
                        throw ex;
                    }
            }


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Sugerido como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:02
    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 15:40
    quinta-feira, 5 de novembro de 2015 14:36
    Moderador
  • Muda este codigo 

    private void FecharBanco(SqlConnection cnn)
            {
                if (AbrirBanco().State == ConnectionState.Open)
                    try
                    {
                        AbrirBanco().Close();                   
                    }
                    catch (SqlException ex)
                    {
                        throw ex;
                    }
            }


    A flower cannot blossom without sunshine, and man cannot live without love.

    Obrigado pela dica.!!! Alteração realizada. 
    quinta-feira, 5 de novembro de 2015 15:16
  • Quando voce usa sqlserver quanto tempo leva pra trazer a informacao?

    Pode ser problema relacionado com MySqlserver e nao com o teu codigo...


    A flower cannot blossom without sunshine, and man cannot live without love.

    Então,  pela primeira analise que fiz, utilizei os mesmos servidores para este teste. A media de retorno dos registros  foi em média de 0.393 segundos. o famoso "clicou e apareceu", rsrs.

    Detalhe: Utilizei os mesmos registros contidos no mysql. 


    quinta-feira, 5 de novembro de 2015 15:16
  • Este codigo pega a conecao?

       public void MontarSringSQL()
            {
                db _db = new db();
                foreach (db ob in _db.RetornarDB())
                {
                    conexaoBD = "Server=" + ob.Server + ";" +
                                "Port=" + ob.Port + ";" +
                                "Database=" + ob.Database + ";" +
                                     "Uid=" + ob.Uid + ";" +
                                     "Pwd=" + ob.Pwd + ";";
                    //conexaoBD = "Data Source=" + nomeServidorBancoDados + "\\" + nomeInstanciaBancoDados + ";Initial Catalog=" + nomeBancoDados + ";Persist Security Info=True;User ID=" + nomeUsuarioBancoDados + ";Password=" + senhaBancoBancoDados;
                }
            }     

    este codigo tambem: 

     public List<db> RetornarDB()
            {
                List<db> list = new List<db>();

                db _db = null;
                try
                {
                    XmlDocument document = new XmlDocument();
                    document.Load(Directory.GetCurrentDirectory() + "\\config.xml");
                    XmlNodeList _xmlreader = document.GetElementsByTagName("connection");

                    foreach (XmlNode ob in _xmlreader)
                    {
                        _db = new db();

                        _db.Server = ob["Server"].InnerText;
                        _db.Database = ob["Database"].InnerText;
                        _db.Uid = ob["Uid"].InnerText;
                        _db.Pwd = ob["Pwd"].InnerText;
                        _db.Encrypt = ob["Encrypt"].InnerText;
                        _db.Port = ob["Port"].InnerText;

                        list.Add(_db);
                    }
                    return list;
                }
                catch (XmlException ex)
                {
                    throw ex;
                }
            }
        }
    }

    podemos alterar, a demora pode estar ai...


    A flower cannot blossom without sunshine, and man cannot live without love.

    quinta-feira, 5 de novembro de 2015 17:18
    Moderador
  • Este codigo pega a conecao?

       public void MontarSringSQL()
            {
                db _db = new db();
                foreach (db ob in _db.RetornarDB())
                {
                    conexaoBD = "Server=" + ob.Server + ";" +
                                "Port=" + ob.Port + ";" +
                                "Database=" + ob.Database + ";" +
                                     "Uid=" + ob.Uid + ";" +
                                     "Pwd=" + ob.Pwd + ";";
                    //conexaoBD = "Data Source=" + nomeServidorBancoDados + "\\" + nomeInstanciaBancoDados + ";Initial Catalog=" + nomeBancoDados + ";Persist Security Info=True;User ID=" + nomeUsuarioBancoDados + ";Password=" + senhaBancoBancoDados;
                }
            }     

    este codigo tambem: 

     public List<db> RetornarDB()
            {
                List<db> list = new List<db>();

                db _db = null;
                try
                {
                    XmlDocument document = new XmlDocument();
                    document.Load(Directory.GetCurrentDirectory() + "\\config.xml");
                    XmlNodeList _xmlreader = document.GetElementsByTagName("connection");

                    foreach (XmlNode ob in _xmlreader)
                    {
                        _db = new db();

                        _db.Server = ob["Server"].InnerText;
                        _db.Database = ob["Database"].InnerText;
                        _db.Uid = ob["Uid"].InnerText;
                        _db.Pwd = ob["Pwd"].InnerText;
                        _db.Encrypt = ob["Encrypt"].InnerText;
                        _db.Port = ob["Port"].InnerText;

                        list.Add(_db);
                    }
                    return list;
                }
                catch (XmlException ex)
                {
                    throw ex;
                }
            }
        }
    }

    podemos alterar, a demora pode estar ai...


    A flower cannot blossom without sunshine, and man cannot live without love.

    alterado para :

    try
                {
                    XmlDocument document = new XmlDocument();
                    document.Load(Directory.GetCurrentDirectory() + "\\config.xml");
                    XmlNodeList _xmlreader = document.GetElementsByTagName("connection");
                    foreach (XmlNode ob in _xmlreader)
                    {
                        conexaoBD = "Server=" + ob["Server"].InnerText + ";" +
                                      "Port=" + ob["Port"].InnerText + ";" +
                                  "Database=" + ob["Database"].InnerText + ";" +
                                       "Uid=" + ob["Uid"].InnerText + ";" +
                                       "Pwd=" + ob["Pwd"].InnerText + ";";
                    }
                }
                catch (XmlException ex)
                {
                    throw ex;
                }

    Realizei os teste msmo assim o tempo nao sai da media de 2.33.

    Reparei um ponto muito interessante no momento de realizar a abertura do banco. Fiz um debbug do código, no ato de realizar a abertura ( "cn.open(); "), o VS dá uma travada, depois a abertura é realizada.

    A string de conexao é gerada a patir de um XML 

    Vejam a estrutura dele

    <connection>
      <Server>localhost</Server>
      <Port>3306</Port>
      <Database>dbvenda</Database>
      <Uid>root</Uid>
      <Pwd>123</Pwd>
      <Encrypt>true</Encrypt>
    </connection>

    quinta-feira, 5 de novembro de 2015 21:11
  • Bom dia,

    A pergunta inicial da thread já foi devidamente respondida?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 6 de novembro de 2015 12:01
  • A forma em que tu programa ja nao se usa muito...

    Troca isto pra isto:

            MySqlCommand cmd {get; set;} 
            MySqlConnection cnn {get; set;}
            MySqlDataReader dr {get; set;}
            MySqlDataAdapter {get; set;}
            DataSet ds {get; set;}
            DataTable dt {get; set;}

    este codigo deveria usar Using

      private MySqlCommand ExecutarSQL(string sql)
            {
                //Tratamento de erros
                try
                {

    Using (

    codigo aki

    )            }
                //Caso ocorra algum erro, o metodo catch irá informar qual o erro
                catch (MySqlException ex)
                {
                    //Retorna o erro apontado
                    throw ex;
                }
                return cmd;
            }

    Acho que a tua conecao atrasa...


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Nelson_lucas quarta-feira, 11 de novembro de 2015 23:30
    sexta-feira, 6 de novembro de 2015 14:08
    Moderador
  • Notei que voce tem um metodo que retorna um Idatareader!

    Nao e boa pratica de programacao, tu nunca deverias retornar um datareader mais sim uma lista.

    Desta forma:

    public List<Class1Aluno> testereader(string sql)
            {
                Aluno = new List<Class1Aluno>();

                SqlDataReader r = ExecutarSQL(sql).ExecuteReader();

                if (r.HasRows)
                {
                    while (r.Read())
                    {
                        Aluno.Add(new Class1Aluno
                        {
                            Name = r[0].ToString(),
                            Adress = r[1].ToString(),
                            Age = r[2].ToString(),
                            ID = r[3].ToString()
                        });

                    }
                }

                r.Close();
                return Aluno;
            }


    A flower cannot blossom without sunshine, and man cannot live without love.

    sexta-feira, 6 de novembro de 2015 14:56
    Moderador
  • Bom dia,

    A pergunta inicial da thread já foi devidamente respondida?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    Ainda não, mas creio que estamos próximos de descobrir a causa do problema.

    att.

    sexta-feira, 6 de novembro de 2015 15:13
  • Notei que voce tem um metodo que retorna um Idatareader!

    Nao e boa pratica de programacao, tu nunca deverias retornar um datareader mais sim uma lista.

    Desta forma:

    public List<Class1Aluno> testereader(string sql)
            {
                Aluno = new List<Class1Aluno>();

                SqlDataReader r = ExecutarSQL(sql).ExecuteReader();

                if (r.HasRows)
                {
                    while (r.Read())
                    {
                        Aluno.Add(new Class1Aluno
                        {
                            Name = r[0].ToString(),
                            Adress = r[1].ToString(),
                            Age = r[2].ToString(),
                            ID = r[3].ToString()
                        });

                    }
                }

                r.Close();
                return Aluno;
            }


    A flower cannot blossom without sunshine, and man cannot live without love.

    Mas a ideia do IDataReader é para uso genérico, pois ela sera utilizada para  'N' classes, e executar 'N' queries de consultas.  Neste caso, pelo fato dela ser para uso genérico, o que me recomendaria?
    • Editado Nelson_lucas sexta-feira, 6 de novembro de 2015 15:16 falta de complemento
    sexta-feira, 6 de novembro de 2015 15:15
  • Como esta a utilizar?

    Posta aki o codigo...

    Tu tens uma interface?


    A flower cannot blossom without sunshine, and man cannot live without love.

    sexta-feira, 6 de novembro de 2015 20:07
    Moderador
  • Como esta a utilizar?

    Posta aki o codigo...

    Tu tens uma interface?


    A flower cannot blossom without sunshine, and man cannot live without love.

    Bom, ficaria similar ao código abaixo:

    public List<pagina> RetornaPagina(){

    ComandoSQL exec = new ComandoSQL();

    Pagina p = null; 

    List<Pagina> list= new List<Pagina>();

    string aSql = "Select codPag,nomPag,desPag, sitPag from Pagina";

    IDataReader dr = exec.RetornaIDataReader(aSql);

    while(dr.Read()){

    p = new Pagina();

    p.codPag = dr.getInt(0);

    p.nomPag = dr.getString(1);

    p.desPag = dr.getString(2);

    p.sitPag = dr.getInt(3);

    list.add(p);

    }

    return list;

    }

    sexta-feira, 6 de novembro de 2015 22:33
  • Nao vai funcionar... tenta por favor depois diz-me o erro que gera...antes de compilar 


    A flower cannot blossom without sunshine, and man cannot live without love.

    sábado, 7 de novembro de 2015 15:39
    Moderador
  • Amigo ao retornar o datatable desabilite as Constraints

    sua_data_table.EnforceConstraints = false;

    Dessa forma ira o sistema não irá fazer as validações da chaves e terá um load mais rápido!



    *****************************************************
    Rafael Almeida Programador Sênior - JAMSOFT Sistemas
    rafaelalmeida@jamsoft.com.br
    www.jamsoft.com.br
    *****************************************************
    Asp.Net 5 Vnext, C# 6, Entity Framework e SQL Server
    *****************************************************

    sábado, 7 de novembro de 2015 23:35
  • Amigo ao retornar o datatable desabilite as Constraints

    sua_data_table.EnforceConstraints = false;

    Dessa forma ira o sistema não irá fazer as validações da chaves e terá um load mais rápido!



    *****************************************************
    Rafael Almeida Programador Sênior - JAMSOFT Sistemas
    rafaelalmeida@jamsoft.com.br
    www.jamsoft.com.br
    *****************************************************
    Asp.Net 5 Vnext, C# 6, Entity Framework e SQL Server
    *****************************************************

    Opa, aceito sua dica!!!

    Pessoal, problema resolvido, as dicas acima foram utilizadas e fico agradecido pela ajuda.

    Problema: Lentidão ao realizar consultas

    Solução:

    1º - Upgrade no banco de dados. A versão instalada era a Mysql v5.5 e foi atualizada para 5.7.

    2º Alteração do collation da base de dados que se encontrava errada.

    Apos estas alterações, as consultas estão retornando em 0.231 s. 

    Muito obrigado pelas dicas e pelo empenho em ajudar pessoal. Fica a dica: "Ao criar uma base de dados, verifiquem o collation pois isso influencia muito na questão de desempenho."

    • Marcado como Resposta Marcos SJ sexta-feira, 13 de novembro de 2015 13:30
    quarta-feira, 11 de novembro de 2015 23:30