Array
(
)

Classe Conexão C#

Eduardo Siqueira
   - 25 ago 2010

Olá Pessoal,
 estou iniciando um projeto no meu trabalho do 0, e eu estou precisando de uma boa prática de programação para construir uma classe de conexão e como usa-la, alguém poderia me ajudar ? :)

Atenciosamente,

 Eduardo

Anderson Peluso
   - 25 ago 2010

using System;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace PowerAPF.powerAPFDAO
{
    public class usuarioDAO
    {
        /// <summary>
        /// Metodo responsável por incluir os usuários no banco
        /// </summary>
        /// <param name="nome">Nome do usuário</param>
        /// <param name="login">Login do usuário</param>
        /// <param name="senha">Senha do usuário</param>
        public void incluirUsuario(string nome, string login, string senha)
        {

            SqlConnection conexao = new SqlConnection(@"Data Source=ELTON-PC;Initial Catalog=dbPowerAPF; User Id=usr_app; Password=usr_app");

            SqlCommand cmd =
                new SqlCommand("insert into GER_USUARIO (usr_login, usr_senha, usr_nome) values (@login,@senha,@nome)", conexao);

            cmd.Parameters.AddWithValue("@login", login);
            cmd.Parameters.AddWithValue("@nome", nome);
            cmd.Parameters.AddWithValue("@senha", senha);
            
            conexao.Open();
            cmd.ExecuteNonQuery();
            conexao.Close();

        }

    }
}
 

0
|
0

Eduardo Siqueira
   - 25 ago 2010

Anderson, obrigado pela sua resposta, mais eu queria uma classe de conexão Generica.

0
|
0

Paulo Freire
|
MVP
Pontos: 10
    25 ago 2010

Uma simples para SQLServer

using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration;
namespace Persistencia{    public static class Banco    {
        public static SqlConnection conexao = new SqlConnection();
        public static void AbrirConexao()        {            conexao.ConnectionString = @"Data Source=SERVIDOR_012\SQL2008;Initial Catalog=shalom;Persist Security Info=True;User ID=paulo;Password=elevem_123456";            conexao.Open();        }


       
        public static void FecharConexao()        {            if (conexao.State == ConnectionState.Open)            {                conexao.Close();                conexao.Dispose();            }        }
        public static void ExecutarComando(string textoComando)        {            if (conexao.State != ConnectionState.Open)            {                AbrirConexao();            }            SqlCommand comando = new SqlCommand();            comando.CommandText = textoComando;            comando.Connection = conexao;            int registrosAfetados = comando.ExecuteNonQuery();        }
        public static SqlDataReader SelecionarRegistros(string textoComando)        {            if (conexao.State != ConnectionState.Open)            {                AbrirConexao();            }            SqlCommand comando = new SqlCommand();            comando.CommandText = textoComando;            comando.Connection = conexao;            return comando.ExecuteReader();        }
        public static SqlDataReader SelecionarUmRegistro(string textoComando)        {            if (conexao.State != ConnectionState.Open)            {                AbrirConexao();            }            SqlCommand comando = new SqlCommand();            comando.CommandText = textoComando;            comando.Connection = conexao;            return (SqlDataReader)comando.ExecuteScalar();        }
    }}

0
|
0

Jardel Sobrinho
   - 25 ago 2010

Tem uma que eu uso nos meus projetos. Ela usa o Mysql como banco de dados. Mas acho que é facil portar para qualquer outro banco de dados. A string de conexão fica localizada no arquivo Web.Config.

    <appSettings>
      <add key="Conexao.ConnectionString" value="server=host_do_servidor;connection timeout=120;uid=usuario_do_banco;database=nome_do_banco;pwd=senha_do_banco"/>
    </appSettings>

Em seguida, uso a classe de conexão BancoDados.cs, que possui os métodos para fazer a conexão.
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Collections;
using System.Reflection;
using System.Collections.Generic;
using MySql.Data;

public class BancoDados
{
    private MySqlConnection vConexao;

    public MySqlConnection BuscarConexao()
    {
        try
        {
            AppSettingsReader config = new AppSettingsReader();
            vConexao = new MySqlConnection();
            vConexao.ConnectionString = (string)config.GetValue("Conexao.ConnectionString", typeof(String));
            vConexao.Open();
            return vConexao;
        }
        catch
        {
            return null;
        }       
       
    }
}

Ela me retorna a conexão já aberta. Se quiser, pode fazer o metodo BuscarConexao como estatico(static) também.

0
|
0

Jardel Sobrinho
   - 25 ago 2010

Apenas um detalhe, para usar a classe ficaria mais ou menos assim

BancoDados bd = new BancoDados;

using(MySqlConnection con = bd.BuscarConexao())
{
    //Foi criado a conexão no objeto con, agora é só utilizado.
    //...Operações a serem realizadas...
   con.Close();
}

0
|
0

Marcio
   - 25 ago 2010

Eduardo, Já que você tá começando seu projeto do zero, que tal pensar no "Entity Framework"?  

0
|
0

Eduardo Siqueira
   - 25 ago 2010

Marcio, bem pensado cara, eu vou ver aqui, vou fazer um de teste aqui em casa, mais será que não é muito complicado ? dá uma luz ae =]

0
|
0

Eduardo Siqueira
   - 25 ago 2010

Marcio, bem pensado cara, eu vou ver aqui, vou fazer um de teste aqui em casa, mais será que não é muito complicado ? dá uma luz ae =]

0
|
0

Marcio
   - 26 ago 2010

Eduardo, é muito simples, procure na web alguns tutoriais, acho que nunca mais você vai querer desenvolver de outro jeito.
Um link interessante para começar:
http://imasters.uol.com.br/artigo/17459/aspnet/asp_net_usando_os_recursos_do_entity_framework_4__first-model_e_crud/

Bom estudo.

0
|
0

Eduardo Siqueira
   - 27 ago 2010

Marcio,

      Realmente é muito bom, como sempre você com suas sugestões e soluções muito bem vindas :).
  Valeu,  e valeu a todos também que postaram uma solução ,todas foram uteis.

    Abraços.

0
|
0

Marco Menezes
   - 27 out 2011

Iae Pessoal estou com uma dúvida sobre como recupera as informações que estão dentro da classe (Connection). Passei uma select mais não consigo ler a informação que foi retornado pela instrução.


protected void Button2_Click(object sender, EventArgs e)
{
try
{

Connection.AbrirConexao();
if ((TextBox4.Text != "") && (TextBox5.Text != ""))
{
string SQL=("SELECT USERLOGIN,USERSENHA FROM TBUSER"+
" WHERE USERLOGIN = "+TextBox4.Text+""+
" AND USERSENHA = "+TextBox5.Text+"");

Connection.SelecionarUmRegistro(SQL);
MultiView1.ActiveViewIndex = 1;

Classe connection
public static SqlDataReader SelecionarRegistros(string textoComando)
{
if (conexao.State != ConnectionState.Open)
{
AbrirConexao();
}
SqlCommand comando = new SqlCommand();
comando.CommandText = textoComando;
comando.Connection = conexao;
return comando.ExecuteReader();


Abraço.

0
|
0

Joel Rodrigues
   - 28 out 2011

Boa tarde, Marco Aurélio.

O método SelecionarUmRegistro retorna um único objeto. Este objeto é o conteúdo da primeira coluna da primeira linha do resultado da consulta. No seu caso (SELECT USERLOGIN, USERSENHA FROM TBUSER), o resultado do método será o conteúdo da coluna USERLOGIN do usuário que está tentando fazer login (se os dados estiverem corretos).
Para saber se o usuário conseguirá realizar login (USERLOGIN e USERSENHA válidos), vc pode verificar se o retorno do método é diferente de null (se for null, a consulta não retornou registros).
Porém, sugiro que você mude o método para o seguinte:

#Código

public static object SelecionarUmRegistro(string textoComando)
        {
            if (conexao.State != ConnectionState.Open)
            {
                AbrirConexao();
            }
            SqlCommand comando = new SqlCommand();
            comando.CommandText = textoComando;
            comando.Connection = conexao;
            return comando.ExecuteScalar();
        }

Da outra forma, não atendia a sua necessidade e ainda estava sujeito a erros.

0
|
0

Joel Rodrigues
   - 28 out 2011

Paulo Freire, boa tarde.
Quanto ao código que você postou, CREIO que há uma falha, desculpe se eu estiver errado.
No método SelecionarUmRegistro, você está convertendo (cast) o retorno do método ExecuteScalar() em um SqlDataReader. Acontece que o ExecuteScalar() retorna o conteúdo da primeira coluna da primeira linha do resultado da consulta, ou seja, pode ser um int, string, bool, etc., mas não um conjunto de informações (SqlDataReader).
Considerando isto, a conversão se torna inválida, não?
Você poderia alterar o ExecuteScalar para ExecuteReader ou mudar o tipo de retorno. Bem, para isso tem várias soluções.
Atenciosamente,
Joel Rodrigues
joelrlneto@gmail.com

0
|
0