Conexao.cs

<< Click to Display Table of Contents >>

Navigation:  Persistencia > Persistencia > banco >

Conexao.cs

Previous pageReturn to chapter overviewNext page

using System;

using System.Data;

using MySql.Data.MySqlClient;

 

namespace Persistencia.banco

{

    /// <summary>

    /// Encapsula e faz o controle de conectar na base, abrir e fechar. É Disposable, permite o uso de "using"

    /// </summary>

    public class Conexao : IDisposable

    {

        private MySqlConnection conexaoMySql = null;

 

        public static Conexao Get(string connectionString)

        {

            Conexao conexao = new Conexao(connectionString);

            conexao.Connect();

            return conexao;

        }

 

        public Conexao(string connectionString)

        {

            this.conexaoMySql = new MySqlConnection(connectionString);

        }

 

        public MySqlConnection GetConnection()

        {

            return this.conexaoMySql;

        }

 

        public bool IsConnected()

        {

            return (this.conexaoMySql.State == ConnectionState.Open);

        }

 

        public void Connect()

        {

            this.conexaoMySql.Open();

        }

 

        #region controle de dispose

        // estes métodos de dispose foi tirado do site da propria MS: 

        // http://msdn.microsoft.com/pt-br/library/vstudio/system.idisposable.aspx

        // e http://ferottoboni.wordpress.com/2010/08/20/exemplo-de-implementacao-de-idisposable/

        public void Dispose()

        {

            Dispose(true);

            // This object will be cleaned up by the Dispose method. Therefore, you should call GC.SupressFinalize to

            // take this object off the finalization queue and prevent finalization code for this object from executing a second time.

            GC.SuppressFinalize(this);

        }

 

        // booleano para controlar se

        // o método Dispose já foi chamado

        bool disposed = false;

 

        // método privado para controle

        // da liberação dos recursos

        protected virtual void Dispose(bool disposing)

        {

            // Verifique se Dispose já foi chamado.

            if (!this.disposed)

            {

                if (disposing)

                {

                    // Liberando recursos gerenciados

                    this.conexaoMySql.Close();

                    this.conexaoMySql.Dispose();

                }

 

                // Seta a variável booleana para true,

                // indicando que os recursos já foram liberados

                disposed = true;

            }

        }

 

        // Por fim, precisamos programar o método finalizador da classe, que é invocado pelo garbage collector para liberar os recursos. 

        // Toda liberacao implementada dentro dele só será executada quando o metodo for invocado, 

        // porém não conseguimos saber quando isto vai acontecer e recursos importantes podem ficar presos até que isto aconteça.

        ~Conexao()

        {

            // Do not re-create Dispose clean-up code here. Calling Dispose(false) is optimal in terms of readability and maintainability.

            Dispose(false);

        }

        #endregion

    }

}