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í: jkolacek
  • Nový dnes Dnes nových 1
  • Nový včera Včera nových: 0
  • Počet uživatelů: Celkem: 4706
Lidé online:
  • Návštěvníci: Návštěvníků: 16
  • Registrovaných Členů: 0
  • Celkem Celkem: 16
Mapa Stranek

.NET a Firebird Embedded

Každý to zná. Databáze jsou velký pomocník. Transakce vyřeší mnoho problémů a constrainty zase udrží data resp. uživatele v těch správných mezích. Jenže když člověk píše jednoúčelovou aplikaci, která má být „dej na flashku a používej, jak chceš“ je s databázemi trochu problém.

Každý to zná. Databáze jsou velký pomocník. Transakce vyřeší mnoho problémů a constrainty zase udrží data resp. uživatele v těch správných mezích. Jenže když člověk píše jednoúčelovou aplikaci, která má být „dej na flashku a používej, jak chceš“ je s databázemi trochu problém. Můžete mít nainstalován server kdesi v internetu a na něm mít databáze – jenže musíte obhospodařovat server jako takový, databáze na něm; no prostě moc práce, nehledě na to, že když uživatel vaší aplikace bude bez připojení k internetu, moc toho neudělá (ano je to řešitelné, ale …). Na druhou stranu můžete jednoduchou, nejlépe bezobslužnou, instalaci serveru přihodit k aplikaci – nicméně uživatel musí mít práva instalovat software, aplikaci nemůže lehce přenášet a nemůže ji používat bez problémů ani na dvou místech.

Ačkoli nainstalovaný server přináší mnoho výhod od výkonu přes jednotnou politiku zálohování a bezpečnosti až po možnost práce mnoha uživatelů společně, embedded databáze stále nevymřely. Na internetu lze nalézt mnoho implementací, s různými vlastnostmi a s různým stupněm kvality. My se dnes podíváme na jednu z nich – Firebird Embedded. Proč zrovna Firebird? Předně Firebird Embedded existuje jak ve formě serveru, tak i jako embedded. A přechod mezi nimi není vůbec obtížný. Změníte jen jeden parametr v connection stringu a je hotovo. Nemusíte ani překompilovávat aplikaci. Vše ostatní funguje stejně. Embedded verze umí vše co server, nejde tedy o nějaký degradovaný extrakt. Kdo se chce dozvědět více o Firebirdu obecně, může využít odkazů pod článkem [1], [2].

Co všechno tedy budeme potřebovat? Samozřejmě samotný Firebird Embedded. Ke stažení na http://www.firebirdsql.org/index.php?op=files&id=engine, aktuální verze (v době psaní článku) je 2.0.3. Protože se pohybujeme na .NET palubě, bude to chtít i nějaký provider. ODBC aspol. rovnou zamítneme a raději si stáhneme nativní provider. Firebird ADO.NET Data Provider je dispozici pro .NET Framework 1.1, 2.0, Compact Framework 2.0, Mono 1.1.18+, vše „roste“ na http://www.firebirdsql.org/index.php?op=files&id=netprovider. Existuje i DDEX provider pro Visual Studio, nicméně jeho použití není předmětem tohoto článku. Pro zájemce doporučuji článek [3] event. [4].

ADO.NET provider je jen jedno assembly, které stačí přidat k projektu a začít využívat odpovídající namespaces. Vlastní embedded server je několik souborů, které stačí přihodit k distribuci aplikace. Nezbytně budete potřebovat fbembed.dll, icudt30.dll, icuin30.dll, icuuc30.dll. Vhodné je přidat i intl\fbintl.conf, intl\fbintl.dll, pro podporu všech znakových sad. Na některých systémech resp. konfiguracích nemusí být k dispozici knihovny msvcp71.dll a msvcr71.dll, tyto najdete také v balíku a v případě nutnosti je distribuujte společně s aplikací. Strukturu adresářů je třeba zachovat tak jako v archivu. Obecně je třeba fbembed.dll umístit na místo, kde systém implicitně hledá DLL knihovny. Pokud vám toto nevyhovuje, je možné v provideru specifikovat, odkud má být knihovna načítána.

Jakmile máme vše připraveno, můžeme se pustit do tvorby naší první aplikace s databází „zapečené“ přímo s aplikací. Předpokládám, že máte minimální zkušenosti s ADO.NET a nebudu se tedy zabývat detaily. Nareferencujte do projektu FirebirdSql.Data.FirebirdClient assembly a přidejte stejnojmenný namespace. V této chvíli už vám nebrání nic vytvářet si spojení a příkazy jak je libo. Jako jednoduchý příklad je možné použít:

   1:  using (FbConnection conn = new FbConnection(@"initial catalog=C:\NejakaDatabaze.fdb;user id=SYSDBA;password=masterkey;ServerType=1;ClientLibrary=C:\Aplikace\fbembed.dll"))
   2:  {
   3:      conn.Open();
   4:      using (FbCommand cmd = conn.CreateCommand())
   5:      {
   6:          cmd.CommandText = "select id, neco from tabulka";
   7:          using (FbDataReader reader = cmd.ExecuteReader())
   8:          {
   9:              while (reader.Read())
  10:              {
  11:                  Console.WriteLine("ID: {0} \t Name: {1}", reader[0], reader[1]);
  12:              }
  13:          }
  14:      }
  15:  }

 

Pozorného čtenáře jistě napadlo, jak se můžeme připojit k DB, když ještě žádnou nemáme. Inu řešení je velmi jednoduché. Objekt FbConnection má statickou metodu CreateDatabase. Vytvoření DB již také není problém.

Doposud jsme se zabývali tak trochu mimoděk aplikacemi v klasickém – desktopovém – pojetí. Nicméně ani ASP.NET není s Firebirdem Embedded problém. Asi nikoho nepřekvapí, že vlastní .NET kód zůstává stejný. Nemění se vlastně vůbec nic. Jediné co je třeba zajistit je, aby ASP.NET aplikace mělo právo přistoupit k fbembed.dll. Nic magického. A přidat si lehce databázi k ASP.NET aplikaci není zas tak špatná výzva, že?

Abychom ale neskončili tak rychle, určitě vás napadalo, jaké má FB Embedded neřesti a problémy, neboť všude je nějaký háček. V zásadě nepřijde žádný podraz. Fungují transakce, fungují cizí klíče, fungují uložené procedury. Stejně jako na serveru. Prostě vše co od databáze můžete potřebovat. Avšak knihovna fbembed.dll není aktuálně k dispozici v 64-bit verzi. Znamená to, že musíte aplikaci označit – ve vlastnostech projektu – jako 32-bit (x86), jinak se totiž nepovede knihovnu zavést. Další problém je exkluzivní zamykání databázového souboru. U běžných desktopových aplikací to tolik nevadí, ale u ASP.NET může. Je tedy nutné, v případě ASP.NET, zajistit, aby přístup k souboru byl pouze z jednoho procesu. A nakonec poslední; je třeba přidat uživatelům právo „Create Global Objects“ (standardně jen Administrators) od WinXP SP2 a vyšší.

Co potřebujete více? Nic. Tato minimalistická konfigurace se vejde i na nejmenší flashku, kterou dnes objevíte. Nezbývá než mít geniální nápad, proměnit jej v aplikaci a tu v pohádkové množství peněz.

Jiri Cincura :: 1. listopadu 2007 :: 1923 shlédnutí :: 0 komentářů
kategorie: Databáze a práce s XML, Vývoj webových aplikací, Vývoj Windows aplikací

Comments

Nyní zde nejsou žádné kometáře. Buďte první!
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

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...

URL rewriting v IIS a ASP.NET

URL rewriting, neboli přepisování URL, je jednou z technik, jak udělat adresy dynamicky generovaných stránek "uživate...