SQL Server 2005 Compact Edition

Tomáš Herceg       01.08.2007       SQL, Databáze       15036 zobrazení

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.

Vytvoření SDF databáze

 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:

        'připojit se k databázi
        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:

        'uložit změny a zavřít spojení s databází
        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.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

SQL Server Compact

Dobrý den, já bych bral nějaký úvod jak přejít z SQL CE 3.5 do nové 4.0, kde MS udělal Tools pouze pro ASP :-(. Vy píšete o nějaké verzi 3.1 či co je ta CE 2005?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: SQL Server 2005 Compact Edition

Nakolko som zaciatocnik v programovani vo VB:NET a databazach (SDF-SQL Server 2005 Compact Edition), prosim vas o radu ako si mozem programovo zistit strukturu SDF databazy. Potrebujem poradit ako programovo zistim mena tabuliek v SDF databaze. Popripade potrebujem naviest ako si programovo zistit strukturu jednotlivých tabuliek.

V SQL Server management studiu som si pomocou SQL dotazu:

SELECT TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME <> 'Table'

zistil mena tabuliek. Avsak bohuzial neviem vysledky tohto dotazu vyuzit v kode programu pisaneho vo VB.NET. Ako k nim pristupovat?

Vopred dakujem za radu a nakopnutie.

Rado

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: SQL Server 2005 Compact Edition

Souhlasím, velmi pěkný článek.

Přecházím, tedy pokouším se, z pokusů ve VB6 a *.mdb na VB.NET a SQL Server Express a nedá mi to nepoložit neomalený dotaz.

Pokud by se jednalo o jednoduchou databázi a pokud se dá říci, že se jedná o nástupce Accessu, lze pracovat se souborem *.sdf ve sdíleném síťovém adresáři a jednotlivými pc, pak postačí aplikaci tato knihovna k připojení a práci s touto databází?

Jak mohu v expres verzi pracovat s *.mdf v síťovém prostředí, prý se tato verze neumí připojit na sql server? Poraďte,prosím, jak coby hoby "progranátora" začátečníka nasměrovat(nakopnout), aby mohl vybrat nejlepší řešení pro jednoduchou sdílenou databázi v síťovém prostředí v omezení express verze...

Mnoho zdaru

Gábinka

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Nástupcem Accessu je Microsoft SQL Server Compact Edition, který funguje prakticky stejně. Databáze mají příponu SDF a pracuje se s ním velmi podobně. Něco málo najdete v článku http://www.vbnet.cz/clanek--52-komunikac..., místo uvedené ukázky kódu použijte objekty SqlCeConnection a SqlCeCommand, které se používají pro práci s touto verzí databáze.

Rozdíl mezi Express edicí a Compact edicí je v tom, že Express edice a vyšší beží jako služba a databázi může využívat více aplikací najdenou, kdežto s Compact edicí má každá aplikace databázi svoji a není k tomu používána žádná služba.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Super návod. Mam dost banální věc. Jaka vlastnost nebo kombinace mi nastavi velikost DataGridView podle obsahu (podle zahlavi všech sloupců). Vyzkousel jsem vse co nejak souvisi se size, autosize... a nic.

Chtel bych pouzit v kombinaci s form.autosize=true bez všech scrollBars. Jde to nejak? Dík.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Diskuse: SQL Server 2005 Compact Edition

Pracujem ako administrator oracle servera a s databazami.V zivote som sa o programovanie nezaujimal , ale vase clanky k VB.NET a s nim suvisiace su zaujimave a zrozumitelne aj zaciatocnikovy takze ma to celkom chytilo.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback