ADO .NET - Criando um Acesso de dados Genérico (revisitado)
Neste artigo vamos recordar como podemos criar um acesso a dados genérico usando os objetos da ADO .NET. |
Eu apresentei os conceitos básicos da ADO .NET neste artigo , e, estou voltando a esse assunto depois de algum tempo para recordar a sua aplicação no VS 2017 Communtiy.
A biblioteca ADO.NET fornece diferentes tipos de provedores de dados para trabalhar com diferentes fontes de dados. Três provedores de dados comuns são OLE DB, SQL e ODBC.
A principal
razão de usar diferentes provedores de dados é manter o desempenho e não perder
a funcionalidade do provedor de dados nativos. Por exemplo, quando você acessa
um banco de dados do Access usando o provedor de dados OLE DB, ele usa provedor
OLE DB nativo para acessar o banco de dados, mas quando você usa o provedor de
dados ODBC para acessar um banco de dados do Access, ele usa a camada
ODBC na
camada nativa.
Em resumo, todas as classes do provedor de dados, como conexão, comando,
adaptador de dados e leitor de dados, são herdadas das interfaces. E focando nas
interfaces o objetivo deste artigo é mostrar como você pode escrever uma classe
genérica, que pode acessar os dados usando os provedores de dados OLE DB, SQL e
ODBC com base na seleção do usuário no tempo de execução.
O modelo de interface
Cada provedor
de dados implementa algumas interfaces. Essas interfaces são definidas no
namespace System.Data. Por exemplo, as classes
SqlConnection, OleDbConnection e OdbcConnection são
derivadas da interface IDbConnection.
Semelhante às classes de conexão, outros componentes do ADO.NET, como
DataAdapter, DataReader, Command, também implementam suas interfaces
relativas.
Vamos usar essas interfaces para escrever classes genéricas de acesso a dados. O
objetivo não é implementar todas as funcionalidades mas dar uma boa ideia de
como isso funciona e como você pode estender as funcionalidades. Veja as
referências para saber mais sobre esse assunto.
Ao trabalho...
recursos:
Criando o projeto Windows Forms
Vamos criar um projeto Windows Desktop usando o template Windows Forms App(.NET Framework) com o nome WF_GenericAccess.
No formulário padrão inclua a partir da ToolBox os controles:
Disponha os controles conforme o leiaute exibido na figura abaixo:
Pronto nossa interface já esta pronta.
Criando a classe para acesso genérico
Inclua uma classe (poderia ser outro projeto do tipo Class Library) chamada: AcessoGenerico com o código abaixo:
using System.Data;
using System.Data.Common;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace WF_GenericAccess
{
public class AcessoGenerico
{
private static IDbConnection iconexao = null;
private static IDbDataAdapter iadapter = null;
private static DbDataAdapter dbAdapter = null;
private static IDataReader ireader = null;
public AcessoGenerico()
{ }
// GetConnection retorna IDbConnection
public static IDbConnection GetConnection(int connType, string connString)
{
switch (connType)
{
case 1: // OleDb Data Provider
iconexao = new OleDbConnection(connString);
break;
case 2: // Sql Data Provider
iconexao = new SqlConnection(connString);
break;
case 3: // ODBC Data Provider
iconexao = new OdbcConnection(connString);
break;
// case 3: //inclua o seu dataprovider customizado aqui
default:
break;
}
return iconexao;
}
// GetDataAdapter retorna IDbDataAdapter
public static IDbDataAdapter GetDataAdapter(int connType, string connString, string sql)
{
switch (connType)
{
case 1: // OleDb Data Provider
iadapter = new OleDbDataAdapter(sql, connString);
break;
case 2: // Sql Data Provider
iadapter = new SqlDataAdapter(sql, connString);
break;
case 3: // ODBC Data Provider
iadapter = new OdbcDataAdapter(sql, connString);
break;
// case 3: //inclua o seu dataprovider customizado aqui
default:
break;
}
return iadapter;
}
}
}
|
Nossa classe de acesso genérico na verdade apenas retorna a conexão e um adapter genérico conforme o provedor selecionado. Aqui você deve implementar os métodos para realizar o CRUD.
A seguir temos o código do evento Click do botão de comando após o usuário selecionar o provedor de dados desejado:
using System;
using System.Data;
using System.Windows.Forms;
namespace WF_GenericAccess
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string connString, sql;
IDbConnection conn = null;
IDbDataAdapter adapter = null;
private void btnConectar_Click(object sender, EventArgs e)
{
//define a consulta SQL para acessar a tabela Employees
sql = "SELECT * FROM Employees";
if (rdbOleDb.Checked)
{
connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\dados\\Access\\Northwind.mdb";
conn = AcessoGenerico.GetConnection(1, connString);
adapter = AcessoGenerico.GetDataAdapter(1, connString, sql);
}
else if (rdbSql.Checked)
{
connString = "Data Source=MACORATTI;Initial Catalog=Northwind;Integrated Security=True";
conn = AcessoGenerico.GetConnection(2, connString);
adapter = AcessoGenerico.GetDataAdapter(2, connString, sql);
}
else if (rdbOdbc.Checked)
{
// defina sua conexão aqui
// connString = "sua_conexão";
conn = AcessoGenerico.GetConnection(3, connString);
adapter = AcessoGenerico.GetDataAdapter(3, connString, sql);
}
try
{
conn.Open();
// preenche o DataSet
DataSet ds = new DataSet();
adapter.Fill(ds);
dgvDados.DataSource = ds.Tables[0].DefaultView;
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
finally
{
conn.Close();
}
}
}
}
|
Estamos acessando aqui efetivamento o banco de dados Northwind no formato do Microsoft Access na pasta c:dados\Access e no formato do SQL Server.
A consulta SQL definida vai retornar todos os registros da tabela Employees e exibir no DataGridView.
Uma abordagem mais robusta seria utilizar o padrão Factory para criar a camada de acesso a dados genérica.
Pegue o código do projeto aqui: WF_GenericAccess.zip
"Disse-lhe, pois, Pilatos: Logo tu és rei? Jesus
respondeu: Tu dizes que eu sou rei. Eu para isso nasci, e para isso vim ao
mundo, a fim de dar testemunho da verdade. Todo aquele que é da verdade ouve a
minha voz."
João 18:37
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
ASP .NET Core 2 - MiniCurso Básico - Macoratti
ASP .NET Core - Macoratti
C# - Aplicando os conceitos da POO na prática - Macoratti.net
C# - Aplicando conceitos OOP e Polimorfismo na prática - Macoratti.net