C# - Acessando Ms Access em uma aplicação Windows Forms


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:

http://www.microsoft.com/downloadS/details.aspx?FamilyID=c6661372-8dbe-422b-8676-c632d66c529c&displaylang=en

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

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 a 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() esta 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;

A pegue o projeto completo aqui: daoAccess.zip

Eu sei é apenas C# mas eu gosto...

Referências:


José Carlos Macoratti