Creio que uma das edições menos conhecidas (ou mais desprezadas) do Sql Server seja a Compact Edition.
Antigamente sempre sonhávamos com um banco de dados simples para pequenas aplicações e que não requeresse a instalação de um monstrengo (ou a utilização de aberrações como o Access e/ou Paradox). Creio que hoje em dia como boa parte das aplicações está indo para a WEB e existem outras alternativas (como armazenar dados em XML), a procura por uma versão lightweight de gerenciador de banco de dados tenha diminuido.
No entanto, sempre existirão as aplicações “Offline” que precisam rodar em um notebook desconectado, um smartphone ou PDA, ou ainda, uma aplicação leve que você quer distribuir pela Net. Para esses casos o Sql Compact 2008 é perfeito.
O Sql Compact é embedded, ou seja, roda no contexto da aplicação, não requerendo a instalação de um servidor. Obviamente isso tem algum custo e o custo é o corte de algumas features. Você não pode, por exemplo, rodar stored procedures.
Longe de querer fazer um tutorial extensivo, quero com esse post apenas relacionar alguns recursos disponíveis na net e passar algumas dicas (coisas que estou aprendendo aqui na porrada).
Links Interessantes:
A página do produto: http://www.microsoft.com/Sqlserver/2008/en/us/compact.aspx
Microsoft SQL Server Compact 3.5 Books Online and Samples (versão offline): http://www.microsoft.com/downloads/details.aspx?FamilyID=1ff0529a-eb1f-4044-b4b7-40b00710f7b7
Tutorial: Introducing Microsoft SQL Server Compact Edition (Part I)(parte 2 linkada no texto. A parte dois trata dos serviços de sincronização)
Veja abaixo algumas dicas rápidas:
Sql Compact e Linq to Sql.
O designer do Linq to Sql não suporta o SQL Compact, no entanto isso pode ser contornado utilizando o utilitário de linha de comando SQL Metal para gerar o dbml, como sugerido neste artigo do Marcoratti
Se você preferir, pode usar o SqlMetal Builder, que é uma GUI para o SQL Metal.
O restante do Linq to Sql funciona normalmente, como podemos ver nesse exemplo:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main(string[] args)
{
string connectionstring = "...";
Northwind db = new Northwind(connectionstring);
db.Log = Console.Out; // opcional, mas util para debug
var q = from c in db.Customers
where c.City == "London"
select c;
foreach (Customer cust in q) Console.WriteLine(cust.ContactName);
}
}
String de Conexão
A string de conexão para um arquivo sdf (o banco de dados literalmente falando) é extremamente simples. Supondo que o arquivo esteja na raíz do seu projeto, a string será “Data Source=.\nomedoarquivo.sdf”
Classes
As classes para manipulação do Sql Compact tem a partícula “CE” no meio. Veja o exemplo abaixo:
using(SqlCeConnection con = new SqlCeConnection(@"Data Source=.\otw.sdf")){
SqlCeCommand comm = new SqlCeCommand("select * from users", con);
con.Open();
using (SqlCeDataReader dr = comm.ExecuteReader())
{
while (dr.Read())
{
MessageBox.Show(dr[0].ToString());
}
}
}
Para utilizar essas classes você deve referenciar a library System.Data.SqlServerCe.
Distribuição
No tutorial citado acimaexiste uma seção chamada “Deployment” que mostra quais DLLs você precisa mandar para o seu usuário. Sim, são apenas DLLs gerenciadas, nada de instalação!