Vou mostrar como acessar o MS Access usando a linguagem C#.
Vou usar o banco de dados Northwind.mdb, e, se você ainda não tem, pode baixá-lo aqui:
Após o fazer o download você pode criar uma pasta no drive C: com o nome dados e copiar nela o arquivo.
Desta forma teremos o seguinte caminho para o banco de dados : c:\dados\Northwind.mdb. Este será o caminho usado no exemplo do artigo , se você desejar alterar, altere também o caminho na string de conexão.
Criando o projeto no SharpDevelop 2.2
Vamos criar uma nova solução C# usando o SharpDevelop 2.2 (você pode usar o Visual C# Express Edition) com o nome daoAccess através do menu Arquivo -> Novo -> Solução , selecionando o Modelo Aplicação Windows.
Neste projeto eu vou mostrar:
- Armazenar a string de conexão no arquivo App.Config;
- Recuperar a string de conexão do arquivo App.Config;
- Como acessar Ms Access através de uma consulta SQL;
- Usar o padrão Singleton para obter somente uma instância da conexão Ms Access;
- Acessar os dados da tabela usando um DataSet;
- Exibir os dados em um controle ListBox;
Como você pode notar, um projeto muito simples pode nos ensinar muitas coisas…
Antes de iniciar vamos incluir uma referência no nosso projeto:
1. System.Configuration – Para podermos acessar a string de conexão do Ms Access no arquivo App.Config;
Clique com o botão direito do mouse sobre o projeto e selecione Adicionar Referência;
Selecione a referência System.Configuration;
Clique no botão OK;
Vamos criar um arquivo App.Config para podermos armazenar a string de conexão.
Clique com o botão direito do mouse sobre o projeto e selecione Adicionar -> Novo Item;
Na janela Nova Arquivo, selecione Misc e App.Config e clique em Criar;
Inclua o código destacado em negrito referente à string de conexão para o Ms Access do nosso exemplo onde estamos acessando o banco de dados Northwind.mdb localizado na pasta c:\dados; (Você pode alterar a senha a seu critério);
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<!-- Example connection to a SQL Server Database on localhost. -->
<!-- <add name="ExampleConnectionString"
connectionString="Data Source=.;Initial Catalog=DBName;Integrated Security=True"
providerName="System.Data.SqlClient" /> -->
<add name="AccessConnectionString"
connectionString="Provider=Microsoft.JET.OLEDB.4.0;data source=c:\dados\Northwind.mdb" />
</connectionStrings>
<appSettings>
<!-- access these values via the property:
System.Configuration.ConfigurationManager.AppSettings[key]
-->
<add key="Setting1" value="Very" />
<add key="Setting2" value="Easy" />
</appSettings>
</configuration>
Vamos agora criar uma classe chamada daoAccess onde iremos usar o padrão Singleton para obter uma única instância da conexão com o Ms Access;
Clique com o botão direito sobre o projeto e selecione Adicionar -> Novo Item;
A seguir selecione C# e em modelo selecione Classe informando o nome daoAccess;
A seguir digite o código abaixo para esta classe:
using System;
using System.Data.OleDb;
using System.Configuration;
namespace daoAccess
{
/// <summary>
/// Acesso a um banco de dados Microsoft Access
/// usando o padrão Singleton
/// </summary>
public class daoAccess
{
private static readonly daoAccess instanciaAccess = new daoAccess();
private daoAccess(){ }
public static daoAccess getInstancia()
{
return instanciaAccess;
}
public OleDbConnection getConexao()
{
string conn = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ToString();
return new OleDbConnection(conn);
}
}
}
No formulário mainform.cs inclua um componente ListBox e um componente Button defina a opção Sair conforme o leiaute abaixo;
Agora defina os namespaces que iremos usar neste formulário :
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data;
No evento Load do formulário temos a chamada da rotina initMsAccessSingleton();
void MainFormLoad(object sender, EventArgs e)
{
initMsAccessSingleton();
}
O código da rotina initMsAccessSingleton() está abaixo e usa um DataSet para preencher um DataAdapter e assim exibir o nome da empresa no ListBox através de um laço foreach;
public void initMsAccessSingleton()
{
using (OleDbConnection conexaoAccess = daoAccess.getInstancia().getConexao())
{
try
{
conexaoAccess.Open();
// cria o dataset
DataSet ds = new DataSet();
// cria o adapter e preenche o dataset
OleDbDataAdapter adapter = new OleDbDataAdapter("Select * from Customers", conexaoAccess);
adapter.Fill(ds);
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows) {
listBox1.Items.Add(dr["CompanyName"].ToString());
}
}
catch (OleDbException oledbex)
{
MessageBox.Show("Erro de acesso aos dados " + oledbex.Message,"Erro");
}
finally
{
//fecha a conexao
conexaoAccess.Close();
}
}
}
Executando o projeto iremos obter o ListBox preenchido conforme a figura abaixo;
Pegue o projeto completo aqui: daoAccess.zip
Eu sei, é apenas C#, mas eu gosto…