Pokud děláte rozsáhlé databázové aplikace, tato edice SQL serveru asi nebude ta nejvhodnější. Pokud ale píšete malou aplikaci, jako třeba evidenci knížek v knihovně, pak byste tento modul mohli náležitě ocenit.
SQL Server 2005 Compact Edition je balíček o velikosti 3 MB, který obsahuje knihovnu pro jednoduchou práci s databází. Dalo by se říci, že se jedná o nástupce MS Accesu. Samotná data se ukládají do souboru (s příponou SDF) a aplikace pracuje pomocí knihovny přímo s tímto souborem.
Hlavní rozdíl mezi Compact edicí a edicemi vyššími (počínaje Express edition) je ovšem ten, že Compact edice neběží jako služba. Je to víceméně jen knihovna, která si při startu aplikace otevře soubor a umožňuje pracovat s daty uvnitř. Jakmile aplikaci ukončíte, datový soubor se uzavře. Z toho také vyplývá, že databáze patří jen jedné aplikaci, pokud ji chceme sdílet, není tato edice vhodná. Velmi dobře Compact edition poslouží jako úložiště dat pro řádově tisíce záznamů, má trochu omezenou paletu funkcí (umí jen standardní příkazy a pohledy; procedury a triggery tam nenajdete).
Drobná nevýhoda je ta, že jej nemůžeme využívat s designeru v Express edicích vývojových nástrojů. Pomocí kódu se ale k databázi připojíme. Získání ResultSetu a jeho načtení do DataGridView je na 4 řádky, vše funguje tak, jak má.
Co budeme potřebovat?
Abychom mohli pohodlně spravovat strukturu databáze, potřebujeme program SQL Server Management Studio Express edition (musí mít SP2, jinak se k souborům Compact edice nedostaneme!), který si můžete stáhnout zde. Také budeme potřebovat SQL Server 2005 Compact Edition Runtime, který je ke stažení zde. Oba programy si stáhněte a nainstalujte, abychom mohli pokračovat dále.
Jak vytvořit databázi?
Jakmile se instalace dokončí, spusťte Server Management Studio (v nabídce Start se schovalo do složky Microsoft SQL Server 2005). V úvodní obrazovce pro výběr databáze vyberte v horním seznamu položku SQL Server Compact Edition a v druhém položku New Database.
Jakmile potvrdíte všechny dialogy, otevře se vám nově vytvořená databáze. Nyní můžete snadno vytvářet tabulky a vazby mezi nimi. Nám bude stačit velmi jednoduchá tabulka - spusťte tedy na databázi tento skript:
CREATE TABLE [Spoluzaci] (
[SpoluzakId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Jmeno] NVARCHAR(100) NOT NULL,
[Prijmeni] NVARCHAR(100) NOT NULL,
[DatNarozeni] DATETIME NOT NULL,
[ICQ] NCHAR(11) NULL
);
INSERT INTO [Spoluzaci] ([Jmeno], [Prijmeni], [DatNarozeni], [ICQ])
VALUES ('Lubor', 'Křáplina', '19870519 00:00:00.000', '974-387-645');
INSERT INTO [Spoluzaci] ([Jmeno], [Prijmeni], [DatNarozeni], [ICQ])
VALUES ('Lenka', 'Šťastná', '19881103 00:00:00.000', NULL);
INSERT INTO [Spoluzaci] ([Jmeno], [Prijmeni], [DatNarozeni], [ICQ])
VALUES ('Tomáš', 'Modrý', '19880724 00:00:00.000', '078-965-321');
INSERT INTO [Spoluzaci] ([Jmeno], [Prijmeni], [DatNarozeni], [ICQ])
VALUES ('Prokop', 'Diviš', '19870108 00:00:00.000', NULL);
INSERT INTO [Spoluzaci] ([Jmeno], [Prijmeni], [DatNarozeni], [ICQ])
VALUES ('Marie', 'Nováková', '19860630 00:00:00.000', '945-762-110');
Nyní tedy máme databázi s jednou tabulkou Spoluzaci, ve které je 5 záznamů. Pokud chcete, přidejte si další. Podotýkám, že jména a údaje jsou fiktivní, případná podobnost s reálnými osobami a jejich kontakty je čistě náhodná.
Jak se k databázi dostat ve Visual Basic .NET Express?
Pokud máme velké Visual Studio, databázi připojíme jako obvykle. V Express edici taková možnost není, musíme to provést pomocí kódu.
Vytvořte si tedy nový projekt typu Windows Application a v průzkumníku projektu poklepejte na položku My project. V okně vlastností přejděte na záložku References a tlačítkem Add Reference... zobrazte dialog pro výběr knihovny. Na záložce Browse nalistujte cestu C:\Program Files\Microsoft SQL Server Compact Edition\v3.1\ a vyberte soubor System.Data.SqlServerCe.dll. Potvrďte výběr tlačítkem OK a ve spodním seznamu ve vlastnostech projektu zaškrtněte položku System.Data.SqlServerCe. Okno zavřete a projekt si uložte.
Na formulář přidejte komponentu DataGridView, ve které zobrazíme záznamy. Dále poklepejte na formulář, aby se vytvořila procedura události Form1_Load. Nad proceduru přidejte tyto deklarace:
Dim con As SqlCeConnection
Dim com As SqlCeCommand
Dále do procedury Form1_Load vložte tento kód, který otevře spojení s databázovým souborem a vytáhne z něj data:
con = New SqlCeConnection("Data Source=c:\test.sdf")
con.Open()
com = New SqlCeCommand("SELECT * FROM [Spoluzaci]", con)
DataGridView1.DataSource = com.ExecuteResultSet(ResultSetOptions.Updatable Or ResultSetOptions.Scrollable)
Nakonec přidejte proceduru FormClosing, do které zapište tyto řádky:
DataGridView1.CancelEdit()
com = Nothing
con.Close()
A to je celé. Jako při přístupu do kterékoliv jiné databáze máme objekt spojení (Connection), které musíme otevřít před prací s daty, a zavřít po ukončení práce. Pro samotný přístup k datům máme objekt příkazu (Command), kterému předáme SQL dotaz a spojení, a pak se jej zeptáme na výsledek. Ten předáme komponentě DataGridView, která si s ním již poradí. Tímto způsobem funguje práce s jakoukoliv databází, akorá přesné názvy tříd se nepatrně liší. Základní princip je stejný.
Při načítání formuláře tedy vytvoříme nový objekt SqlCeConnection, kterému předáme připojovací řetězec (Connection String). Ten definuje, kde se data nachází, případně jak se k nim máme dostat, dále může obsahovat uživatelská jméno a heslo atd. Nám stačí pouze zadat cestu k databázovému souboru. Pak na tomto objektu zavoláme metodu Open, která otevře soubor. Na konci nesmíme zapomenout spojení zavřít!
Dále vytvoříme objekt SqlCeCommand, kterému předáme SQL příkaz "SELECT * FROM [Spoluzaci]", který vybere všechny záznamy z tabulky Spoluzaci. Metoda ExecuteResultSet vrací datovou sadu (ResultSet), jednoduše řečeno načte data do paměti. Pokud chceme mít možnost data upravovat, musíme dát parametr Updatable, dále musíme také předat parametr Scrollable, jinak nám DataGridView data vůbec nepřijme. Výsledek přiřadíme do vlastnosti DataSource komponenty DataGridView. Ta už se s daty popere tak, jak je třeba.
Při zavírání formuláře nejprve zavoláme CancelEdit, aby se buňka, kterou právě editujeme, uložila. Zrušíme příkaz a zavřeme spojení k databázovému souboru. Toť vše. Pokud program spustíme, data se nám zobrazí. Navíc je můžeme přidávat a odebírat záznamy a upravovat jednotlivé buňky. Vše se průběžně ukládá do databáze.
Ještě nám samozřejmě zbývá ošetřit chybné uživatelské vstupy, jako třeba nezadání jména nebo chybné zadání data, ale to nechám na jindy.