none
Organização da conexão de dados RRS feed

  • Pergunta

  • Olá Pessoal,

     

    Gostaria de pedir a ajuda de voces para montar uma classe de conexão com o banco de dados, ja estou conseguindo me conectar e realizar as operações que desejo (Insert, Select, Delete e Update), mais acho que nao estou fazendo da melhor maneira, pois todas as vezes que preciso realizar uma operação no banco tenho que fazer a mesma coisa: Criar uma ConnectionStrings e tambem um MySqlConnection.

    Veja abaixo como estou fazendo:

    Arquivo cad_catequista.aspx.cs

     

    using System.Data.SqlClient;
    using System.Data;
    using MySql.Data.MySqlClient;
    
    
            public void cadastrarCatequista()
            {
                
                String conexString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["MySql_Catequese"].ConnectionString;
                MySql.Data.MySqlClient.MySqlConnection conexao = new MySql.Data.MySqlClient.MySqlConnection(conexString);
                
    
                string nome = Txnome.Text;
                string Telefone_res = TxTelefone_res.Text;
                string Telefone_cel = TxTelefone_cel.Text;
                string nascimento = TxdateNascimento.Text;
                string email = Txemail.Text;
                string enderco = Txendereco.Text;
                string cidade = Txcidade.Text;
                string estado = Txestado.Text;
                string sexo = RadioButtonSexo.Text;
                string situacao = RadioButtonListSituacao.Text;
                string coordenador = RadioButtonListCoordenador.Text;
    
                try
                {
                    conexao.Open();
    
                    MySqlCommand comsql = new MySqlCommand("INSERT INTO CATEQUISTA " +
                    "(nome, telefone_res, telefone_cel, dth_nascimento, email, " +
                    "enderco, cidade, estado, sexo, situacao, coordenador, dth_inclusao)" +
                    "VALUES ('" + nome + "'," + Telefone_res + "," + Telefone_cel + ",'" + nascimento + "','" + email +
                    "','" + enderco + "','" + cidade + "','" + estado + "','" + sexo + "','" + situacao + "','" + coordenador + "',now())", conexao);
    
                    comsql.ExecuteNonQuery();
                    conexao.Close();
                    conexao.Dispose();
                    LabelTexto.Text = "Dados Gravados com Sucesso!";
                }
    
                catch (Exception ex)
                {
                    LabelTexto.Text = "Ocorreu um erro Verifique os dados digitados!";        
                    Console.WriteLine(ex.ToString());
                }
            }
    
    
    

    tentei criar uma classe de conexão mais nao consegui.

    estou fazendo da maneira certa ou existe uma maneira mais correta de fazer.

    Obrigado!


    Renatin
    domingo, 8 de janeiro de 2012 10:56

Respostas

  • Amigo, bom dia.

    eu faria assim:

        public class ConnectionClass
        {
            /// <summary>
            /// Variável que irá armazenar a conexão
            /// </summary>
            System.Data.SqlClient.SqlConnection MyConnection = null;
    
            /// <summary>
            /// Método construtor da classse recebendo como parâmetro o nome da string de conexão
            /// </summary>
            /// <param name="consString"></param>
            public ConnectionClass(string connString)
            {
                String StringConexao = System.Web.Configuration.WebConfigurationManager.ConnectionStrings[connString].ConnectionString;
                MyConnection = new System.Data.SqlClient.SqlConnection(StringConexao);
            }
    
            //Classe Para Abrir a Conexão
            public void abrir_Conexao()
            {
                if (MyConnection.State == System.Data.ConnectionState.Closed)
                    MyConnection.Open();
            }
    
            //Classe Para Fechar a Conexão
            public void fecha_Conexao()
            {
                if (MyConnection.State == System.Data.ConnectionState.Open)
                    MyConnection.Close();
            }
    
            public SqlConnection retornaConexao
            {
                get { return MyConnection; }
            }
        }
    


    Troquei as referências do MySQL para SqlConntion, por que a minha máquina não tem o driver o MySQL. É só trocar de volta.

    veja:

    estou definido uma variável interna a minha classe que irá armazenar o string de conexão durante a execução do código.

    defini que, a instanciação da string de conexão será feita no método construtor da classe, assim eu garanto que a string de conexão nunca será um objeto vázio.

    Criei uma propriedade para você poder retornar o objeto de conexão.

    não é necessário retornar nada nos comandos abrir e fechar, pois como trabalhamos como referênciamento de memória, o objeto saberá qual a conexão deverá ser aberta ou fechada.

    montei um exemplo simples para você ver como funciona:

    //Exemplo
                ConnectionClass connClass = new ConnectionClass("ApplicationServices");
                SqlConnection connString = connClass.retornaConexao;
                while (connString.State == ConnectionState.Closed)
                {
                    connClass.abrir_Conexao();
                }
    



    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Renato.s.almeida terça-feira, 10 de janeiro de 2012 00:05
    segunda-feira, 9 de janeiro de 2012 12:21
    Moderador

Todas as Respostas

  • Podes fazer desta forma, eu apenas usei oledb, no seu caso seria Mysql

      public class Class_Conecao

        {

            public Class1 parametros;

            public OleDbConnection conectar;

            OleDbCommand Cnn_Command;

            OleDbDataAdapter adapter;

            OleDbParameter[] Criar_Par;

            public Class_Conecao()

            {

                Class1 parametros = new Class1();

                conectar = new OleDbConnection();

                conectar.ConnectionString = "Escreva sua conecao aqui";

                Cnn_Command = new OleDbCommand();

                adapter = new OleDbDataAdapter();

            }

            public OleDbConnection Open_Cnn()

            {

                if (conectar.State == System.Data.ConnectionState.Closed)

                {

                   conectar.Open();

                }

                return conectar;

            }

            public OleDbConnection Close_Cnn()

            {

                if (conectar.State == System.Data.ConnectionState.Open)

                {

                    conectar.Close();

                }

                return conectar;

            }

            public DataTable Chamar_Tabela(string Sql_String)

            {

                //Cnn_Command = Open_Cnn().CreateCommand();

                Cnn_Command.CommandType = CommandType.Text;

                Cnn_Command.CommandText = Sql_String;

                Cnn_Command.Connection = Open_Cnn();

                DataTable tabela = new DataTable();

                OleDbDataAdapter adapter = new OleDbDataAdapter();

                 try

                {

                    adapter.SelectCommand = Cnn_Command;

                    adapter.Fill(tabela);

                }

                catch (OleDbException e)

                {

                    MessageBox.Show(e.GetBaseException().ToString());

                }                 

                finally { adapter.Dispose(); Close_Cnn(); };

                return tabela;            

            }

     


    One word frees us of all the weight and pain of life: that word is love.
    domingo, 8 de janeiro de 2012 11:09
  • Levi Obrigado.

     

    Fiz os seguintes metodos:

     

     

    public MySqlConnection My_Conexao;
    
    //Classe de Conexão
            public MySqlConnection Classe_Conecao()
            {
                String StringConexao = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["MySql_KBIT"].ConnectionString;
                MySql.Data.MySqlClient.MySqlConnection My_Conexao = new MySql.Data.MySqlClient.MySqlConnection(StringConexao);
    
                return My_Conexao;
            }
    
            //Classe Para Abrir a Conexão
            public MySqlConnection abrir_Conexao()
            {
                if (My_Conexao.State == System.Data.ConnectionState.Closed)
                {
                    My_Conexao.Open();
                }
                return My_Conexao;
            }
    
            //Classe Para Fechar a Conexão
            public MySqlConnection fecha_Conexao()
            {
    
                if (My_Conexao.State == System.Data.ConnectionState.Open)
                {
                    My_Conexao.Close();
                }
                return My_Conexao;
            }
    

     

    Os metodos de Abrir e Fechar a conexão estão apresentado o seguinte erro:

     

     

    Object reference not set to an instance of an object.

    System.NullReferenceException: Object reference not set to an instance of an object.


    Renatin
    domingo, 8 de janeiro de 2012 14:15
  • Voce nao fez referencia a sua conecao, esta vazia.
     My_Conexao..ConnectionString = new MySql.Data.MySqlClient.MySqlConnection(StringConexao);

    One word frees us of all the weight and pain of life: that word is love.
    domingo, 8 de janeiro de 2012 16:48
  • Levi,

     

    tentei aplicar o que voce disse mais nao consegui

    sua sugestão foi de referenciar a conexao no metodo que abre e fecha a conexao.

     

    tentei fazer da seguinte forma mais nao consigo poisda Erro: Não é possível converter implicitamente o tipo 'MySql.Data.MySqlClient.MySqlConnection' em 'string' e nenhum converte funcionou.

    OBS: sou um iniciante em c#.

     

    Obrigado!


    Renatin
    domingo, 8 de janeiro de 2012 17:49
  • Amigo, bom dia.

    eu faria assim:

        public class ConnectionClass
        {
            /// <summary>
            /// Variável que irá armazenar a conexão
            /// </summary>
            System.Data.SqlClient.SqlConnection MyConnection = null;
    
            /// <summary>
            /// Método construtor da classse recebendo como parâmetro o nome da string de conexão
            /// </summary>
            /// <param name="consString"></param>
            public ConnectionClass(string connString)
            {
                String StringConexao = System.Web.Configuration.WebConfigurationManager.ConnectionStrings[connString].ConnectionString;
                MyConnection = new System.Data.SqlClient.SqlConnection(StringConexao);
            }
    
            //Classe Para Abrir a Conexão
            public void abrir_Conexao()
            {
                if (MyConnection.State == System.Data.ConnectionState.Closed)
                    MyConnection.Open();
            }
    
            //Classe Para Fechar a Conexão
            public void fecha_Conexao()
            {
                if (MyConnection.State == System.Data.ConnectionState.Open)
                    MyConnection.Close();
            }
    
            public SqlConnection retornaConexao
            {
                get { return MyConnection; }
            }
        }
    


    Troquei as referências do MySQL para SqlConntion, por que a minha máquina não tem o driver o MySQL. É só trocar de volta.

    veja:

    estou definido uma variável interna a minha classe que irá armazenar o string de conexão durante a execução do código.

    defini que, a instanciação da string de conexão será feita no método construtor da classe, assim eu garanto que a string de conexão nunca será um objeto vázio.

    Criei uma propriedade para você poder retornar o objeto de conexão.

    não é necessário retornar nada nos comandos abrir e fechar, pois como trabalhamos como referênciamento de memória, o objeto saberá qual a conexão deverá ser aberta ou fechada.

    montei um exemplo simples para você ver como funciona:

    //Exemplo
                ConnectionClass connClass = new ConnectionClass("ApplicationServices");
                SqlConnection connString = connClass.retornaConexao;
                while (connString.State == ConnectionState.Closed)
                {
                    connClass.abrir_Conexao();
                }
    



    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Renato.s.almeida terça-feira, 10 de janeiro de 2012 00:05
    segunda-feira, 9 de janeiro de 2012 12:21
    Moderador
  • Olavo Obrigado,

     

    ficou assim:

     

     public class Conexao
        {
            MySql.Data.MySqlClient.MySqlConnection MyConnection = null;
            public MySqlConnection My_Conexao;
            
            public MySqlConnection conectar(string connString)
            {
                //Defini a String de Conexão que seja utilizadoa (Bando de Dados, Usuario e Senha), estes dado são retornados pelo arquivo Web.config
                String StringConexao = System.Web.Configuration.WebConfigurationManager.ConnectionStrings[connString].ConnectionString;
    
                //Cria a conexão utilizando-se da variavel "StringConexao" definida acima.
                MyConnection = new MySql.Data.MySqlClient.MySqlConnection(StringConexao);
    
                //retorna a conexão
                return MyConnection;
            }
    
            //Metodo Para Abrir a Conexão
            public void abrir_Conexao()
            {
                if (MyConnection.State == System.Data.ConnectionState.Closed)
                    MyConnection.Open();
            }
    
            //Metodo Para Fechar a Conexão
            public void fecha_Conexao()
            {
                if (MyConnection.State == System.Data.ConnectionState.Open)
                {
                   MyConnection.Close();
                   MyConnection.Dispose();
                }
            }
    
            //Metodo que retorna a Conexão
            public MySqlConnection retornaConexao
            {
                get { return MyConnection; }
            }
    
        }
    


    e estou utilizando desta forma:

     

            //String responsavel por definir qual o conexão sera utiliada para realizar as operações no Banco. (Item definido no arquivo Web.config)
            string abreconexao = "NomeDaconnectionStrings";
    
    
    //Cria um OBJETO chamado "Rel_conexao" utilizando-se do arquivo "Conexao.cs"
                Classes.Conexao Rel_conexao = new Classes.Conexao();
                
                // Cria o MySqlComand que realiza o comando SQL utilizando-se da conexao criada
                MySql.Data.MySqlClient.MySqlCommand comandoEtapa = new MySql.Data.MySqlClient.MySqlCommand(sql, Rel_conexao.conectar(abreconexao));
    
                //Retorno da Conexão
                MySqlConnection connStrings = Rel_conexao.retornaConexao;
    
    try
                {   
                    //ABRE CONEXÃO
                    Rel_conexao.abrir_Conexao();
                }
    
    
    
    finally
                {
                    //FECHA CONEXÃO INDEPENDENTE DO SUCESSO DA OPERAÇÃO
                    Rel_conexao.fecha_Conexao();
                }
    
    
    



    Renatin
    terça-feira, 10 de janeiro de 2012 00:05