none
Erro System.InvalidOperationException: ‘Connection must be valid and open.’ Não estou conseguindo conectar ao banco MySql no visual studio 2017 (c#) via servidor externo RRS feed

  • Pergunta


  • Ao tentar conectar no banco de dados externo, aparece a mensagem System.InvalidOperationException: 'Connection must be valid and open. A situação é que quando criei o software em casa, utilizei o wampserver/localhost e funcionava corretamente, porém, ao tentar conectar no trabalho, utilizando as configurações do servidor, da o erro mencionado acima. Tentei utilizar o server com o IP e também com o localhost.

    /////////////////SEGUE ABAIXO AS LINHAS DE CÓDIGOS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    //////////////////CLASSE CONNECTION\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Windows.Forms;
    using MySql.Data.MySqlClient;
    using System.Data.SqlClient;

    namespace Livro_de_Partes
    {
        class Connection
        {
            public static MySqlConnection conexao = null;
            private String stringconnection = "server=10.12.240.45;User Id = root; password=************;database=db_livrodepartes";

            public void tentarAbrirConexaoLocal()
            {
                conexao = new MySqlConnection();
                conexao.ConnectionString = stringconnection;
                conexao.Open();
            }

            public Connection()
            {
                try
                {
                    tentarAbrirConexaoLocal();
                }
                catch
                {
                    Console.WriteLine("Não foi possível validar seu acesso.Tente novamente.");
                }
             }
            public static MySqlConnection getConexao()
            {
                new Connection();
                return conexao;
            }
            public static void fecharConexao()
            {
                conexao.Close();
            }
        }   
    }



    ////////////////////////CLASSE OPERACAOBANCO\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using MySql.Data.MySqlClient;

    namespace Livro_de_Partes
    {
        class OperacaoBanco
        {
            private MySqlCommand TemplateMethod(String query)
            {
                MySqlConnection Conexao = Connection.getConexao();
                MySqlCommand Comando = new MySqlCommand(query, Conexao);

                try
                {
                    Comando.ExecuteNonQuery();
                    return Comando;
                }
                catch
                {
                    return Comando;
                }
            }

            public MySqlDataReader Select(String query)
            {
                MySqlDataReader dadosObtidos = TemplateMethod(query).ExecuteReader();
                return dadosObtidos;
            }

            public Boolean Insert(String query)
            {
                MySqlConnection Conexao = Connection.getConexao();
                MySqlCommand Comando = new MySqlCommand(query, Conexao);

                try
                {
                    Comando.ExecuteNonQuery();
                    return true;
                }
                catch
                {
                    return false;
                }
            }

            public Boolean Update(String query)
            {
                MySqlConnection Conexao = Connection.getConexao();
                MySqlCommand Comando = new MySqlCommand(query, Conexao);

                try
                {
                    Comando.ExecuteNonQuery();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            public Boolean Delete(String query)
            {
                MySqlConnection Conexao = Connection.getConexao();
                MySqlCommand Comando = new MySqlCommand(query, Conexao);

                try
                {
                    Comando.ExecuteNonQuery();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }
    }

    sexta-feira, 23 de fevereiro de 2018 21:43

Todas as Respostas

  • Se o firewall do servidor em questão já permite conexões externas na porta do MySQL, então o problema é o fato de que o usuário root por padrão não aceita conexões remotas. Para permitir conexão remota ao root (sugiro ao invés disso criar outro usuário específico para sua base com apenas as permissões necessárias):

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

    Porém você pode também precisar de alterar o arquivo de configuração do MySQL. Segue link com instruções: https://stackoverflow.com/a/11225588/1184708


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 23 de fevereiro de 2018 22:48