You are on page 1of 5

NET

C# - Acessando Ms Access em uma aplicao Windows Forms


Sexta-feira, 26/09/2008 s 17h00, por Jos Carlos Macoratti

Vou mostrar como acessar o MS Access usando a linguagem C#. Vou usar o banco de dados Northwind.mdb, e, se voc ainda no tem, pode baix-lo aqui: http://www.microsoft.com/downloadS/details.aspx?FamilyID=c6661372-8dbe-422b-8676-c632d66c529c&displaylang=en Aps 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 tambm o caminho na string de conexo.

Criando o projeto no SharpDevelop 2.2


Vamos criar uma nova soluo C# usando o SharpDevelop 2.2 (voc pode usar o Visual C# Express Edition) com o nome daoAccess atravs do menu Arquivo -> Novo -> Soluo , selecionando o Modelo Aplicao Windows.

Neste projeto eu vou mostrar:

Armazenar a string de conexo no arquivo App.Config; Recuperar a string de conexo do arquivo App.Config; Como acessar Ms Access atravs de uma consulta SQL; Usar o padro Singleton para obter somente uma instncia da conexo 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 referncia no nosso projeto: 1. System.Configuration - Para podermos acessar a string de conexo do Ms Access no arquivo App.Config; Clique com o boto direito do mouse sobre o projeto e selecione Adicionar Referncia; Selecione a referncia System.Configuration;

Clique no boto OK; Vamos criar um arquivo App.Config para podermos armazenar a string de conexo. Clique com o boto 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 cdigo destacado em negrito referente string de conexo 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 critrio);

<?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 padro Singletonpara obter uma nica instncia da conexo com o Ms Access; Clique com o boto 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 cdigo 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 padro 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 formulrio mainform.cs inclua um componente ListBox e um componente Button defina a opo Sair conforme o leiaute abaixo;

Agora defina os namespaces que iremos usar neste formulrio :

using using using using using using

System; System.Collections.Generic; System.Drawing; System.Windows.Forms; System.Data.OleDb; System.Data;

No evento Load do formulrio temos a chamada da rotina initMsAccessSingleton();

void MainFormLoad(object sender, EventArgs e) { initMsAccessSingleton(); }


O cdigo da rotina initMsAccessSingleton() est abaixo e usa um DataSet para preencher um DataAdapter e assim exibir o nome da empresa no ListBox atravs de um lao 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...