sexta-feira, 9 de outubro de 2009

Biblioteca BaseDados .NET

Bem, depois de fazer algum software usando base de dados cheguei à conclusão que era mais interessante desenvolver uma biblioteca para trabalhar directamente sobre as BDs e deixar de ter uma class por cada software que desenvolvo para isso.

Deste modo comecei um projecto, BaseDados, que consiste numa biblioteca para acesso, de forma muito facil, a alguns tipos de BDs mais comuns.

Neste momento, e apesar de ainda estar em desenvolvimento, já suporta:
  • Access (incluindo a versão 2007)
  • MySQL
  • Microsoft SQL Server
  • Qualquer ligação por OLEDB

e é compativel com a versão 2.0 da FrameWork .NET. Faço ainda intenções de implementar mais alguns tipos diferentes de acesso a BDs, como por exemplo, Oracle.


Modo de funcionamento.

Depois de adicionar a referencia para a biblioteca (apenas o ficheiro BaseDados.dll):


teremos que dizer que tipo de BD nos queremos ligar.
Para isso, talvez o mais correcto, seja na função main() do programa acrescentar:

using BaseDadosLib;
public class Main
{
public void main() {
MySQL.setInstance("127.0.0.1", "bd", "user_name", "password");
}
}

Desta forma definimos a nossa ligação a uma BD em MySQL; Agora sempre que necessário aceder à BD:

using BaseDadosLib;
public class MyClass {
BaseDados bd = MySQL.getInstance();

private void my_func() {
textBox1.Text = bd.SQLString("SELECT campo1 FROM tabela1");
}
}


Funções.

A biblioteca está, como referido anteriormente, dividida em:
  • BaseDadosLib.MSSQL
  • BaseDadosLib.MySQL
  • BaseDadosLib.ACCESS
  • BaseDadosLib.OleDB
em cada um dos tipos de acesso existem, entre outras, as seguintes funções
  • int SQLNonQuery(string sql)
Executa uma instrução na BD e retorna o número de linhas afectadas (ex.: UPDATE, DELETE, INSERT)
  • string SQLString(string sql)
Devolve a primeira string de dados obtida da consulta
  • string[] SQLStringArray(string sql)
Devolve um array de strings da consulta obtida à BD
  • string[,] SQLStringMatrix(string sql)
Devolve um array bidimensional com os dados obtidos
  • DataTable SQLTable(string sql)
Devolve uma DataTable com os dados obtidos da BD

Tecnologias
Esta biblioteca é baseada em singleton. Um singleton é um objecto criado estaticamente, assim, por mais objectos que se criem, todos estes apontarão para o mesmo objecto.

De uma forma mais simples:
ao criar um objecto, Form xpto = new Form(), este é guardado na memória do computador ocupando determinada memória; ao voltar a criar outro Form com a instrução anterior, é outra vez guardado na memória e assim ocupará mais memória.

O singleton apenas ocupa memória uma vez, pois todos os objectos do mesmo tipo que se criem correspondem ao mesmo objecto.

Daqui se tira logo uma enorme vantagem deste método:
para se trabalhar sobre uma BD não necessitamos de estar constantemente a criar objectos novos para fazer novas ligações, isto acontece por exemplo quando num Form acedem à BD e noutro Form voltam a aceder à mesma BD pois têm que declarar em cada Form um objecto para tal.
Assim, apenas com um único objecto e uma única ligação podem trabalhar em qualquer Form com a vossa BD sem estar a desperdiçar memória por cada novo acesso.

Dicas
Se em determinada class for necessário mais que uma vez o acesso a uma BD, o objecto do tipo BaseDados deve ser declarado como global à mesma class, ou seja, declarar globalmente para assim poder ser visível a todas as funções dessa class evitando a declaração excessiva de variáveis.

Problemas
Poderá ocorrer um erro a quem use sistemas operativos de 64 bits, a estes, devem ir às opções do projecto, e escolher a plataforma x86, como mostra a imagem abaixo para a configuração "All Configurations".




Download
Podes fazer o download da biblioteca aqui (15-01-10)