Skip Navigation Links.
Skip Navigation Links.

.net student

microsoft

Vyhledávání v obsahu portálu


Přihlášení uživatele

Přihlášení uživatele

Členové:
  • Poslední nový uživatel Poslední: liborsky
  • Nový dnes Dnes nových 1
  • Nový včera Včera nových: 0
  • Počet uživatelů: Celkem: 4708
Lidé online:
  • Návštěvníci: Návštěvníků: 26
  • Registrovaných Členů: 0
  • Celkem Celkem: 26
Mapa Stranek

SQL Server Compact Edition a .NET 3.5

Edic oblíbeného databázového stroje Microsoft SQL server je dnes již mnoho. Jednou z nich je edice Compact Edition, která je určena pro embedded využití v jednodušších aplikacích. V tomto článku se podíváme nejen jak tuto databázi použít z  prostředí  Visual Studio 2008, ale také jak k ní programově přistupovat ze starého známého ADO .NET a nakonec jak s touto databází pracovat pomocí nového LINQ.

Co je SQL Server Compact Edition ?

Microsoft SQL server ve své edici Compact Edition je určen pro použití v jednodušších aplikacích pro Windows na PC či Smart Device, kde se počet záznamů nevyšplhává do milionových hodnot, ale zůstává spíše u hodnot v řádech tisíců. Velice důležitý rozdíl oproti ostatním edicím tohoto databázového stroje spočívá hlavně v tom, že neběží jako služba, ale je představován pouze a jedině databázovým souborem s příponou SDF. Tato skutečnost ho tedy předurčuje k embedded použití, podobně jako například případě databázi Firebird Embedded, kde je distribuce relační databáze s vlastní aplikací velice jednoduchá a databáze je používána pouze danou aplikací. Runtime kompaktní edice SQL serveru má velikost pouhých 1,7 MB a od chvíle jeho instalace mohou všechny aplikace na počítači využívat jeho služeb pro přístup k SDF databázím. To tedy znamená, že na daném počítači je potřeba zajistit instalaci tohoto runtime.
                Edice Compact Edition poskytuje omezenou množinu funkčností z „větších“ brášků, ale i tato množina je dle mého názoru dostačující pro potřeby realizace aplikací typu databáze CD či filmů, pro které je edice primárně určena. Mezi podporované funkčnosti mimo jiné patří:
·         možnost definovat pohledy
·         používat vnořené SELECT klauzule
·         podpora základních datových typů (INT, SMALLINT, TINYINT, BIGINT, BIT, DATETIME, NUMERIC, REAL, FLOAT, MONEY, NVARCHAR, NCHAR, NTEXT, UNIQUEIDENTIFIER, VARBINARY, BINARY, IMAGE)
·         referenční integrita
·         vlastnost IDENTITY
 Očekávat však nemůžeme vlastnosti jako uložené procedury či triggery. Databáze může být chráněna heslem a také může být zašifrována. Více o možnostech této edice je možné se dočíst v SQL Server Compact Books Online, které jsou stejně jako samotná databáze k dispozici zdarma ke stažení (viz. Odkazy na zdroje) .

Pro tvorbu schématu databáze při vývoji je možné použít SQL Server Management Studio (i Express) SP2 nebo výborné integrované podpory v novém vývojovém prostředí Visual Studio 2008.

Připojení z SQL Server Management Studia
Dialog pro připojení v SQL Server Management Studiu - je nutné zvolit typ serveru Compact Edtion

Já osobně jsem preferoval práci ve Visual Studiu 2008, kde jsem měl k dispozici vše, co jsem potřeboval.

 

Použití z Visual Studio 2008

Ve Visual Studio 2008 lze velmi pohodlně pracovat s databázemi SQL Serveru Compact Edition, pomocí známého panelu Server Explorer. Skrze tento panel lze vytvořit nový soubor s databází, následně definovat či mazat jednotlivé tabulky a vztahy mezi nimi a také zobrazovat a editovat jejich obsah.
                Novou databázi v prostředí Visual Studio 2008 vytvoříme pomocí volby „Add Connection..“ na uzlu seznamu databázových připojení, kde v následném dialogu nesmíme zapomenout zvolit .NET managed provider pro SQL Server Compact Edition.

Tvorba DB z Visual Studio 2008
Dialog pro přidání DB konexe do Server Exploreru VS 2008, pomocí kterého lze vytvořit novou DB SQL Server Compact Edition.

Tvorba DB z Visual Studio 2008
Dialog tvorby nové DB pro SQL Server Compact Edition ve VS 2008.

Po vytvoření databáze můžeme směle pokročit k pohodlné definici tabulek a jejich případných vazeb. Obě tyto akce jsou představovány separátními akcemi na uzlu databáze v Server Exploreru („Table Properties“ a „Edit Table Schema“).

Tvorba tabulky ve VS 2008
Prostředí pro definici tabulky ve VS 2008

Definice relací mezi tabulkami ve VS 2008
Definice relací mezi tabulkami ve VS 2008

 

Přístup pomocí ADO .NET

Nyní, když už víme co nám SQL Server Compact Edition může nabídnout, přejdeme k možnému použití z platformy .NET. Komponenta ADO .NET je již v .NET frameworku obsažena nějaký ten pátek, takže nepokládám za nutné ji představovat. Pokud budeme chtít pracovat z ADO .NET z databázemi kompaktního SQL serveru, tak budeme využívat služeb tříd ze jmenného prostoru System.Data.SqlServerCe, který je obsažen v implementaci .NET data provideru pro SQL Server Compact Edition. Tento .NET data provider je představován assembly System.Data.SqlServerCe, která je do systému nainstalována v době instalace SQL Server Compact Edition Runtime.  Ve zmíněném jmenném prostoru jsou nám k dispozici typy jako SqlCeConnection, SqlCeCommand, SqlCeDataReader, SqlCeDataAdapter a tak dále. Tyto typy použijeme k implementaci datového přístupu pomocí zažitých idiomů.
string connectionString = GetConnectionString();
SqlCeConnection connection = new SqlCeConnection(connectionString);
SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from movies", connection);
DataTable moviesTable = new DataTable();
try
{
   adapter.Fill(moviesTable);
}
catch (Exception ex)
{
   MessageBox.Show(ex.ToString(), ex.Message);
}
moviesView.DataSource = moviesTable;
Connection string, který se používá pro připojení k databázi SQL Serveru Compact Edition z .NET je v následujícím jednoduchém tvaru.
Data Source=[cesta k SDF souboru];Password=[heslo]
V případě, že daná databáze má být pro aplikaci vytvořena programově, například při prvním spuštění na daném počítači, použijeme služeb tříd SqlCeEngine. Tato třída na sobě nese instanční metodu CreateDatabase, která zajistí vytvoření databázového SDF souboru podle parametrů v connection stringu, který je jí nastaven pomocí konstruktoru nebo vlastnosti LocalConnectionString.
if (!File.Exists(DB_FILE))
{
       SqlCeEngine engine = new SqlCeEngine();
       //nastavit connection string
       engine.LocalConnectionString = GetConnectionString();
       //vytvoreni DB souboru
       engine.CreateDatabase();
       //pripadne zajisteni vytvoreni tabulek pomoci DDL
       CreateTables();
}

Použití LINQ to SQL

Na rozdíl od výše zmiňované komponenty ADO .NET, LINQ je poměrně čerstvou novinkou v oblasti přístupu k datům, která vyšla na svět spolu s .NET frameworkem 3.5. Stručně řečeno, LINQ je integrovaná podpora dotazování do programovacího jazyku. V současnosti tuto podporu nalezneme v jazycích C# 3.0 a VB9, kde můžeme nalézt nová klíčová slova známá z jazyku SQL (select, from, where …). Velkou výhodou této integrace dotazování do jazyku je mimo jiné kontrola dotazů v době kompilace.
LINQ to SQL je jednou z více částí tohoto pozoruhodného projektu, která zajišťuje O-R mapování mezi tabulkami z SQL databáze (zatím jen SQL server) a aplikačními objekty. Dobrou zprávou je, že LINQ můžeme použít i k práci s daty, jež jsou uložena v databázi SQL Serveru Compact Edition. Horší zprávou je, že není možné použít pohodlný LINQ to SQL designér, který je známý z použití s vyššími verzemi SQL serveru, tím pádem se kombinace SQL Server Compact Edition a LINQ to SQL trochu komplikuje.
Cesta k řešení je představována command-line utilitou s názvem sqlmetal.exe. Pomocí této utility, kterou můžeme nalézt na cestě [disk]\ Program Files\Microsoft SDKs\Windows\v6.0A\Bin, je možné nechat vygenerovat soubor obsahující pro LINQ to SQL životně důležitou třídu odvozenou od typu DataContext. Použití utitility sqlmetal.exe pro vygenerování zmíněné třídy je následující:
sqlmetal [cesta k souboru SDF] /code:[soubor výsledné třídy] /password:[heslo k DB]
tedy například:
                sqlmetal "C:\Dokumenty\movies.sdf" /code:moviesDb.cs /password:heslo
Když máme třídu vygenerovanou, zařadíme ji do našeho projektu a přidáme v projektu reference na potřebné assembly (System.Core, System.Data.Linq), pokud v projektu ještě nejsou. Název třídy datového kontextu je odvozen dle názvu databáze, takže pokud se databáze jmenuje movies, jméno vygenerované třídy bude Movies.
[System.Data.Linq.Mapping.DatabaseAttribute(Name="movies")]
public partial class Movies : System.Data.Linq.DataContext
{
 …
}
Překážku k zdárnému použití LINQ to SQL s naší kompaktní databází jsme překonali, takže směle můžeme využívat jednoduchosti a kontroly v compile-time v LINQ. Třeba takovýmto úplně jednoduchým kódem pro získání všech filmů z databáze.
string connectionString = GetConnectionString();
           
Movies moviesDb = new Movies(connectionString);
var allMovies = from m in moviesDb.MoviesTable select m;
           
moviesView.DataSource = allMovies;
 

Závěr

SQL Server Compact Edition představuje velmi zajímavou variantu embedded databáze pro použití v jednodušších aplikacích na platformě Windows. Při vývoji je k dispozici komfort v podobě integrovaného použití z prostředí Visual Studio 2008, kde lze zvládnout všechny základní operace s databází. Jako zatím u jediné embedded databáze lze k přístupu z .NET aplikace použít nejen ADO .NET , ale také nový LINQ.
Odkazy na zdroje
Oficiální česká stránka SQL Serveru Compact Edition : http://www.microsoft.com/cze/windowsserversystem/sql/editions/compact/default.mspx
SQL Server Compact a Visual Studio 2008 :
Projekt LINQ :
Petr Puš :: 15. prosince 2007 :: 1428 shlédnutí :: 2 komentářů
kategorie: Databáze a práce s XML, Vývoj Windows aplikací

Comments

By Sam Sam @ 14. ledna 2008 11:02
Vyzkoušel jsem, perfektní. Řeší to můj problém.
ALE
Udělal jsem jednoduchý prográmek - vytváří tabulku, plní tabulku a vypisuje tabulku (jen čisté SQL). Jak hodinky. No jo ale nerozjede se to na jiném PC ani s nainstlapvaným FW3.5 (ani 2.0 ...). Zkoušel jsem program kompilovat i pro FW 2.0 nebo 3.0 ale zkratka se nerozjede. Na PC kde to bylo vytvořeno s VS2008 se to rozjede i pod jiným uživatelem.
Tak mi není jasné, co musí být na PC nainstalováno aby takový program šel spustit (doufám, že nebudu muset uživatele nutit instalovat spousty dalších ptákovin).
By Petr Puš @ 14. ledna 2008 22:03
Na počítači, kde potřebujete aplikaci spustit je potřeba buď nainstalovat zmiňovaný runtime SQL Serveru Compact Edition (například z oficiálních stránek produktu, na které je odkaz pod článkem) nebo z aplikací distribuovat DLL knihovny SQL Serveru Compact Edition (celkem je jich 8), které naleznete po instalaci ve složce produktu ([disk]Program Files\Microsoft SQL Server Compact Edition\v3.5)
Musíte být přihlášen pro posílání komentářů. Přihlásit se můžete zde
Přehled posledních diskuzí

Přehled posledních diskuzí

  1. ASP.NET programátor zlín [12.16.2008 10:17 odp.]
    Dobrý den,v současné době hledáme programátora na pozici: ASP.NET / C# programátor - Zlín Požadavky: schopnost sam...
  2. RE: MS Fest video [12.08.2008 6:20 odp.]
    AhojVideo záznam bude, po večerech pilně pracujeme na jeho stříhání. Po dokončení se zde určitě vyskytne link na stažení...
  3. MS Fest video [12.04.2008 4:18 odp.]
    Existuje videozáznam z MS Festu konaneho (koncem listopadu 2008) o vikendu na Male Strane na fakulty MFF? Je nekde mozne...
  4. Práce pro programátora [11.25.2008 10:12 dop.]
    Hledám nadšeného programátora na vytvoření webstránek online tv/stream video. V případě zájmu pište na email: projekt@tr...
Novinky z klubů

Novinky z klubů

  1. Programátorské večery: F# 15. prosince 2008
    Ve čtvrtek 18.12.2008 se v rámci programátorských večerů uskuteční přednáška n...
  2. Programátorské večery: VSTO 10. prosince 2008
    Nad kancelářským balíkem MS Office se dají tvořit rozsáhlé aplikace. Od jednod...
  3. Programátorské večery: .NET 4.0 3. prosince 2008
    Zajímá Vás, na co se můžete těšit v nové verzi .NETu? Pak se přijďte podívat n...
  4. Záznamy z programátorských večerů 3. prosince 2008
    Záznamy z prog. večerů (prezentace+dema, občas i nějaké to video) můžete dočasně najít na http://ci...
Co se píše jinde

Co se píše jinde

Windows 7 Beta k dispozici pro MSDN předplatitele

Windows 7 Beta k dispozici pro MSDN předplatitele

Silverlight 2 úvod

Zajímá vás psaní webových aplikací na straně klienta ve vašem oblíbeném nástroji v .NETu? Slyšeli jste o Silverlightu...

PF 2009

Co tak popřát čtenářům programátorského blogu do nového roku? Snad abyste dostávali rozumná zadání a nemuseli tenkou ...

TypeConvertery

V tomto díle si vysvětlíme, co jsou TypeConvertery a k čemu se používají. To si také ukážeme na příkladu.

Atributy jmenného prostoru System.ComponentModel

V tomto článku si ukážeme jak efektivně využívat atributy z jmenného prostoru System.ComponentModel při vytváření vla...