none
Modificar StringConnection para varias classes RRS feed

  • Pergunta

  • Srs, tenho um projeto desenvolvido em camadas.

    Uma delas é a Dados(dao) nele eu tenho varias classes diferentes, porem 2 métodos são exatamente os mesmos para todas elas que são o openConnection() e closeConnection(). Este projeto após finalizado ira ser instalado em outras máquinas, porem meu problema está na string de conexão pois ela esta configurada com as informações do meu computador.

    1° Onde posso deixar estes dois métodos para que todas estas classes possam acessa-los sem a necessidade de eu ficar copiando e colando eles em todas as classes?

    2° Como faço para mudar a string de conexão quando for instalar o programa em outra máquina(isto claro após instalar o SqlExpress)?

    Estou utilizando, VS 2012 Ultimate,.NET 4.5, linguagem C#, Banco de dados SQL 2012.

    Vlw.

    segunda-feira, 19 de maio de 2014 20:00

Respostas

  • adicionei o arquivo "conexao.txt" na pasta que está o .exe do meu programa com os seguintes dados no txt:

    Data Source=192.168.0.xxx;Initial Catalog=db_xxx;User ID=xxxx;Password=

    Bom, os XXX é para preservar a segurança do escritório, nada em particular.

    Logo fiz umas alterações na minha classe Cls_Mysql, segue como ficou

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data.MySqlClient;
    using MySql.Data;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    
    namespace oo_fiscal
    {
        public class Cls_Mysql
        {
            #region atributos
            // atributos //
            public string query_string = "";
            #endregion
            #region metodos
            // metodos //
            public MySqlDataReader mysql_data_reader()
            {
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = get_connection_string();
                conexao.Open();
    
                MySqlCommand comando = new MySqlCommand();
                comando.CommandText = query_string;
                comando.Connection = conexao;
    
                MySqlDataReader reader = comando.ExecuteReader();
    
                return reader;
            }
    
            public DataTable mysql_data_adapter()
            {
                DataTable dtb = new DataTable();
    
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = get_connection_string();
                try
                {
                    conexao.Open();
                    MySqlDataAdapter adapter = new MySqlDataAdapter(query_string, conexao);
    
                    adapter.Fill(dtb);
    
                    conexao.Dispose();
                    adapter.Dispose();
                }
                catch
                {
                }
                return dtb;
            }
    
            public bool execute_non_query()
            {
                try
                {
                    MySqlConnection conexao = new MySqlConnection();
                    conexao.ConnectionString = get_connection_string();
                    conexao.Open();
    
                    MySqlCommand comando = new MySqlCommand();
                    comando.CommandText = query_string;
                    comando.Connection = conexao;
                    comando.ExecuteNonQuery();
    
                    conexao.Dispose();
                    comando.Dispose();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            protected string get_connection_string()
            {
                string path = Directory.GetCurrentDirectory() + "\\conexao.txt";
                StreamReader reader = new StreamReader(path);
                return reader.ReadToEnd();
            }
    
            #endregion
        }
    }
    

    Perceba que coloquei o metodo get_connection_string()

    ele vai abrir o txt, pegar a string e retornar para os metodos principais

    Só sugiro a vc, criar uma classe do tipo static com uma string igualmente static contendo a connection string, assim nao tem que abrir o txt toda vez que for acessar o banco.

    terça-feira, 20 de maio de 2014 16:33
  • Boa tarde.

    Sugiro o seguinte:

    Para a classe DAO, crie uma unica classe de manipulação de banco, fica muito mais simples, posteriormente, herde a classe e todos terão os metodos prontos, logo postarei um codigo para vc compreender.

    Quanto a string de conexão, vc pode por ela no app.config podendo editar o XML para cada pc, ou então, ler a connectionstring de um txt ou XML.

        public class Cls_Mysql
        {
            #region atributos
            // atributos //
            private string string_conexao = "";
            public string query_string = "";
            #endregion
            #region metodos
            // metodos //
            public MySqlDataReader mysql_data_reader()
            {
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = this.string_conexao;
                conexao.Open();
    
                MySqlCommand comando = new MySqlCommand();
                comando.CommandText = query_string;
                comando.Connection = conexao;
    
                MySqlDataReader reader = comando.ExecuteReader();
    
                return reader;
            }
    
            public DataTable mysql_data_adapter()
            {
                DataTable dtb = new DataTable();
    
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = this.string_conexao;
                try
                {
                    conexao.Open();
                    MySqlDataAdapter adapter = new MySqlDataAdapter(query_string, conexao);
    
                    adapter.Fill(dtb);
    
                    conexao.Dispose();
                    adapter.Dispose();
                }
                catch
                {
                }
                return dtb;
            }
    
            public bool execute_non_query()
            {
                try
                {
                    MySqlConnection conexao = new MySqlConnection();
                    conexao.ConnectionString = this.string_conexao;
                    conexao.Open();
    
                    MySqlCommand comando = new MySqlCommand();
                    comando.CommandText = query_string;
                    comando.Connection = conexao;
                    comando.ExecuteNonQuery();
    
                    conexao.Dispose();
                    comando.Dispose();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            #endregion
        }

    Posteriormente, herdei para a classe log

        public class Cls_Log : Cls_Mysql
        {
            #region atributos
    
            public int cd_log;
            private int cd_usuario = Cls_Sistema.cd_usuario;
            public string cd_empresa;
            public string ds_log;
            private DateTime dt_log = DateTime.Now;
    
            #endregion
    
            #region metodos
    
            public bool inserir_log(string codigo_empresa,string mensagem_do_log)
            {
                query_string = "INSERT INTO tb_log (cd_usuario, cd_empresa, ds_log, dt_log) VALUES ('"+this.cd_usuario+"', '"+codigo_empresa+"', '"+mensagem_do_log+"', '"+ this.dt_log.ToString("yyyy-MM-dd HH:mm:ss") +"');";
                if (execute_non_query())
                {
                    return true;
                }
                else
                {
                    Cls_Disparador_De_Email email = new Cls_Disparador_De_Email();
                    email.envia_email_de_log("mensagem: " + mensagem_do_log + "<br><br>usuario: cod. " + Cls_Sistema.cd_usuario + " / nome: " + Cls_Sistema.nm_usuario + "<br><br>Ação feita com a empresa: " + codigo_empresa);
                    return false;
                }
            }
    
            #endregion
        }

    Assim eu nao tenho que me preocupar em ficar re-criando metodos.

    As outras classes do meu sistema, herdei de Cls_Log, uma vez que ele ja possui todas as funções do Cls_Mysql que é minha camada que se comunica com o banco.

    segunda-feira, 19 de maio de 2014 20:09

Todas as Respostas

  • Boa tarde.

    Sugiro o seguinte:

    Para a classe DAO, crie uma unica classe de manipulação de banco, fica muito mais simples, posteriormente, herde a classe e todos terão os metodos prontos, logo postarei um codigo para vc compreender.

    Quanto a string de conexão, vc pode por ela no app.config podendo editar o XML para cada pc, ou então, ler a connectionstring de um txt ou XML.

        public class Cls_Mysql
        {
            #region atributos
            // atributos //
            private string string_conexao = "";
            public string query_string = "";
            #endregion
            #region metodos
            // metodos //
            public MySqlDataReader mysql_data_reader()
            {
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = this.string_conexao;
                conexao.Open();
    
                MySqlCommand comando = new MySqlCommand();
                comando.CommandText = query_string;
                comando.Connection = conexao;
    
                MySqlDataReader reader = comando.ExecuteReader();
    
                return reader;
            }
    
            public DataTable mysql_data_adapter()
            {
                DataTable dtb = new DataTable();
    
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = this.string_conexao;
                try
                {
                    conexao.Open();
                    MySqlDataAdapter adapter = new MySqlDataAdapter(query_string, conexao);
    
                    adapter.Fill(dtb);
    
                    conexao.Dispose();
                    adapter.Dispose();
                }
                catch
                {
                }
                return dtb;
            }
    
            public bool execute_non_query()
            {
                try
                {
                    MySqlConnection conexao = new MySqlConnection();
                    conexao.ConnectionString = this.string_conexao;
                    conexao.Open();
    
                    MySqlCommand comando = new MySqlCommand();
                    comando.CommandText = query_string;
                    comando.Connection = conexao;
                    comando.ExecuteNonQuery();
    
                    conexao.Dispose();
                    comando.Dispose();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            #endregion
        }

    Posteriormente, herdei para a classe log

        public class Cls_Log : Cls_Mysql
        {
            #region atributos
    
            public int cd_log;
            private int cd_usuario = Cls_Sistema.cd_usuario;
            public string cd_empresa;
            public string ds_log;
            private DateTime dt_log = DateTime.Now;
    
            #endregion
    
            #region metodos
    
            public bool inserir_log(string codigo_empresa,string mensagem_do_log)
            {
                query_string = "INSERT INTO tb_log (cd_usuario, cd_empresa, ds_log, dt_log) VALUES ('"+this.cd_usuario+"', '"+codigo_empresa+"', '"+mensagem_do_log+"', '"+ this.dt_log.ToString("yyyy-MM-dd HH:mm:ss") +"');";
                if (execute_non_query())
                {
                    return true;
                }
                else
                {
                    Cls_Disparador_De_Email email = new Cls_Disparador_De_Email();
                    email.envia_email_de_log("mensagem: " + mensagem_do_log + "<br><br>usuario: cod. " + Cls_Sistema.cd_usuario + " / nome: " + Cls_Sistema.nm_usuario + "<br><br>Ação feita com a empresa: " + codigo_empresa);
                    return false;
                }
            }
    
            #endregion
        }

    Assim eu nao tenho que me preocupar em ficar re-criando metodos.

    As outras classes do meu sistema, herdei de Cls_Log, uma vez que ele ja possui todas as funções do Cls_Mysql que é minha camada que se comunica com o banco.

    segunda-feira, 19 de maio de 2014 20:09
  • Maravilha Dietrich, gostei bastante desta idéia.

    Agora referente a colocar a string de conexão no app.config como consigo isso e mais importante, como conseguirei alterar esse string em cada máquina e ela ira influenciar nesse herança criada(a superclasse que terá os métodos teriam que buscar a string neste arquivo também)?

    Vle cara.

    Abraço.

    terça-feira, 20 de maio de 2014 14:18
  • adicionei o arquivo "conexao.txt" na pasta que está o .exe do meu programa com os seguintes dados no txt:

    Data Source=192.168.0.xxx;Initial Catalog=db_xxx;User ID=xxxx;Password=

    Bom, os XXX é para preservar a segurança do escritório, nada em particular.

    Logo fiz umas alterações na minha classe Cls_Mysql, segue como ficou

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data.MySqlClient;
    using MySql.Data;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    
    namespace oo_fiscal
    {
        public class Cls_Mysql
        {
            #region atributos
            // atributos //
            public string query_string = "";
            #endregion
            #region metodos
            // metodos //
            public MySqlDataReader mysql_data_reader()
            {
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = get_connection_string();
                conexao.Open();
    
                MySqlCommand comando = new MySqlCommand();
                comando.CommandText = query_string;
                comando.Connection = conexao;
    
                MySqlDataReader reader = comando.ExecuteReader();
    
                return reader;
            }
    
            public DataTable mysql_data_adapter()
            {
                DataTable dtb = new DataTable();
    
                MySqlConnection conexao = new MySqlConnection();
                conexao.ConnectionString = get_connection_string();
                try
                {
                    conexao.Open();
                    MySqlDataAdapter adapter = new MySqlDataAdapter(query_string, conexao);
    
                    adapter.Fill(dtb);
    
                    conexao.Dispose();
                    adapter.Dispose();
                }
                catch
                {
                }
                return dtb;
            }
    
            public bool execute_non_query()
            {
                try
                {
                    MySqlConnection conexao = new MySqlConnection();
                    conexao.ConnectionString = get_connection_string();
                    conexao.Open();
    
                    MySqlCommand comando = new MySqlCommand();
                    comando.CommandText = query_string;
                    comando.Connection = conexao;
                    comando.ExecuteNonQuery();
    
                    conexao.Dispose();
                    comando.Dispose();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            protected string get_connection_string()
            {
                string path = Directory.GetCurrentDirectory() + "\\conexao.txt";
                StreamReader reader = new StreamReader(path);
                return reader.ReadToEnd();
            }
    
            #endregion
        }
    }
    

    Perceba que coloquei o metodo get_connection_string()

    ele vai abrir o txt, pegar a string e retornar para os metodos principais

    Só sugiro a vc, criar uma classe do tipo static com uma string igualmente static contendo a connection string, assim nao tem que abrir o txt toda vez que for acessar o banco.

    terça-feira, 20 de maio de 2014 16:33
  • Perfeito entendi como fazer!

    Mais uma vez agradeço sua ajuda.

    Abraço.

    quarta-feira, 21 de maio de 2014 14:01