Abrindo tabelas em ASP.NET

No ASP.NET o procedimento pra acessar os dados dum banco é→ abrir uma conexão, carregar uma tabela com a conexão aberta e acessar registros com a tabela carregada.

As classes que abrem a conexão costumam ter o sufixo Connection. Exs.→ MySqlConnection, SqlConnection, OdbcConnection.

Carregar tabela envolve 3 classes→

● Classes com sufixo DataAdapter. Exs.→ MySqlDataAdapter, SqlDataAdapter, OdbcDataAdapter;
● Com sufixo Command. Exs.→ MySqlCommand, SqlCommand, OdbcCommand;
● A classe DataTable.

A classe DataRow é usada pra acessar os registros que foram carregados através de DataTable.



Conectando

A string de conexão SConexao varia de banco pra banco.
Exemplo em MySQL"Server=localhost;UserId=root;Password=;Database=test".


Abrindo/Fechando uma conexão MySQL
MySqlConnection Conexao;

public void AbrirConexao ()

{
  string SConexao;

  SConexao= "Server=servidor;UserId=conta;Password=senha;Database=banco";
  Conexao = new MySqlConnection (SConexao);
  try {
    Conexao.Open ();
  }
  catch (System.ApplicationException AE) {
    Erro= "Erro ao abrir uma conexão com o banco. [" + AE.ToString () + "]";
  }
}

public void FecharConexao ()

{
  if (Conexao != null)
    Conexao.Close ();
}




Carregando

Um objeto do tipo MySqlDataAdapter é responsável por carregar um do tipo DataTable. A rotina Fill é que faz o carregamento.

A string AComando é um comando SQL qualquer.
Exemplo→ "select * from tabela".


Carregando um DataTable em MySQL
public DataTable CarregarDT (string AComando)

{
  DataTable        Retorno;
  MySqlDataAdapter SQLDA;

  Retorno= new DataTable ();
  using (SQLDA= new MySqlDataAdapter (AComando, Conexao)) {
    SQLDA.Fill (Retorno);
  }
  return Retorno;
}




Acessando

Uma vez que um objeto do tipo DataTable foi carregado é só acessar cada linha da tabela com um objeto do tipo DataRow.


Acessando campos com um DataRow em MySQL
public void ListarTodaTabela ()

{
  DataTable DT;

  DT= Conexao.CarregarDT ("select * from tabela");
  foreach (DataRow DR in DT.Rows)
    Response.Write (DR["Campo"].ToString () + "<br>");
}

A instrução foreach é específica do C#.
Equivale a se fazer→

public void ListarTodaTabela ()

{
  DataRow   DR;
  DataTable DT;
  int       J;

  DT= Conexao.CarregarDT ("select * from tabela");
  for (J= 0; J < DT.Rows.Count; J++) {
    DR= DT.Rows[J];
    Response.Write (DR["Campo"].ToString () + "<br>");
  }
}




Exemplificando

O exemplo abaixo carrega a tabela tb_exemplo do banco Access banco_exemplo.mdb.
Pode-se conectar a ele com ODBC ou Jet OLEDB.

O módulo conexao.cs é constituído de 4 classes→

TConector_Base,
TConector_ODBC,
TConector_OLEDB,
TConexao.

As classes TConector_ODBC e TConector_OLEDB objetivam a conveniência.
Elas evitam de se ficar acessando diretamente aquelas com prefixo ODBC, OLEDB, MySQL, SQL, etc (nesse exemplo, trata apenas as 2 primeiras).
TConector_Base é uma classe abstrata (ou seja, serve pra definir os pontos de encapsulamento).

A classe TConexao faz as chamadas pra abrir/fechar uma conexão e carregar uma determinada tabela.


conexao.cs
public abstract class TConector_Base

{
  public DbConnection Conexao;

  public abstract void          CriarConexao   (string AConexao);
  public abstract DbDataAdapter CriarAdaptador (string AComando);
}
public class TConector_ODBC: TConector_Base

{
  public TConector_ODBC ()

  {
    Conexao= null;
  }

  public override void CriarConexao (string AConexao)

  {
    Conexao= new OdbcConnection (AConexao);
  }

  public override DbDataAdapter CriarAdaptador (string AComando)

  {
    return new OdbcDataAdapter (AComando, (OdbcConnection) Conexao);
  }
}
public class TConector_OLEDB: TConector_Base

{
  public TConector_OLEDB ()

  {
    Conexao= null;
  }

  public override void CriarConexao (string AConexao)

  {
    Conexao= new OleDbConnection (AConexao);
  }

  public override DbDataAdapter CriarAdaptador (string AComando)

  {
    return new OleDbDataAdapter (AComando, (OleDbConnection) Conexao);
  }
}
public class TConexao

{
  public string         Erro;
  public TConector_Base Conector;

  public TConexao (int ATipo)

  {
    switch (ATipo) {
      case 0: Conector= new TConector_ODBC ();
              break;
      case 1: Conector= new TConector_OLEDB ();
              break;
    }
  }

  public void AbrirConexao (string AConexao)

  {
    Conector.CriarConexao (AConexao);
    try {
      Conector.Conexao.Open ();
    }
    catch (System.ApplicationException AE) {
      Erro= "Erro ao abrir uma conexão com o banco. [" + AE.ToString () + "]";
    }
  }

  public void FecharConexao ()

  {
    if (Conector.Conexao != null)
      Conector.Conexao.Close ();
  }

  public DataTable CarregarDT (string AComando)

  {
    DataTable     Retorno;
    DbDataAdapter SQLDA;
    
    Retorno= new DataTable ();
    using (SQLDA= Conector.CriarAdaptador (AComando)) {
      SQLDA.Fill (Retorno);
    }
    return Retorno;
  }
}




O módulo default.aspx.cs abre a conexão antes de carregar a página (Page_Load), acessa os dados durante o carregamento (chamando ListarTodaTabela) e fecha explicitamente a conexão depois de carregar a página (Page_UnLoad).

A conexão escolhida é a OLEDB, portanto deve-se passar 1 como parâmetro pra criação da classe TConexao.
A tabela tb_exemplo tem apenas duas colunas→ chave (um auto-incremento) e cor (um campo texto).
A rotina ListarTodaTabela faz o acesso aos dados e usa apenas cor.


default.aspx.cs
public partial class _Default: System.Web.UI.Page

{
  TConexao Conexao;
  protected void Page_Load (object sender, EventArgs e)

  {
    string Banco;

    Banco  = Request.PhysicalApplicationPath + "App_Data\\banco_exemplo.mdb";
    Conexao= new TConexao (1);
    Conexao.AbrirConexao ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Banco);
  }
  protected void Page_UnLoad (object sender, EventArgs e)

  {
    Conexao.FecharConexao ();
  }
  protected void ListarTodaTabela ()

  {
    DataTable DT;
    string    Cor;

    DT= Conexao.CarregarDT ("select * from tb_exemplo");
    foreach (DataRow DR in DT.Rows) {
      Cor= DR["cor"].ToString ();
      Response.Write (@"<tr><td style=""color:" + Cor + @""">" + Cor + "</td></tr>" + '\xA');
    }
  }
}




O módulo default.aspx é a página que será transformada em HTML.


default.aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="default.aspx.cs" Inherits="_Default" %>
<html xmlns="http://www.w3.org/1999/xhtml">
   <head runat="server">
      <title>Acessando Banco de Dados</title>
   </head>
   <body>
      <form id="Formulario" runat="server">
         <table id="TabTabela" style="border: solid 1pt">
            <tr><td style="background-color: Yellow">Cores:</td></tr>
            <% ListarTodaTabela (); %>
         </table>
      </form>
   </body>
</html>




Clique aqui pra baixar o código




http://transeberiano.brinkster.net