Usuário com melhor resposta
Organização da conexão de dados

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
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
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. -
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- Editado Renato.s.almeida domingo, 8 de janeiro de 2012 14:16
-
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.- Editado Levi Domingos domingo, 8 de janeiro de 2012 16:49
-
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 -
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
-
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