Sziasztok!
Talán már másnak is volt olyan sanyarú sorsa, hogy nem fért hozzá egy tárhely szolgáltatónál értelmes adatbázishoz, de azért valamiféle adatkezelésre szüksége lett volna.
Itt is az un. in-process adatbázisok jöhetnek szóba, amelyek nem állandó szervízként futnak és így csak akkor mocorognak ha megszólítják őket. Jellemzően maximum néhány dll és egy fájl ilyenkor az adatbázis. Ezért az egyszerűségért azonban gyakran az elérhető a funkciók szükőségével szoktunk fizetni. Erre a legjobb példa az SQL Server CE, amelyben gyakorlatilag az összes valamire való funkciót kigyilkolták az SQL Serverhez képest.
Ugyanakkor van olyan eset ahol tényleg megmarad a funkció gazdagság. Emiatt a legjobb választás szerintem a FireBird embed változata ahol tényleg minden lehetőség megvan ami a nagytestvérnél is rendelkezésre állt.
Ugyanakkor van egy kis gond az ASP.NET-es felhasználással. A működéshez szükséges dll-eket nem adhatjuk hozzá a projektünkhöz referenciaként, viszont alapból a szerver System32 könyvtárából keresné feldolgozáskor a .net motor. és Unable to load DLL 'fbembed': A megadott modul nem található hibaüzenetet ad a kapcsolat megnyitásakor. Mit is csináljuk ilyenkor? Mondjuk meg neki kódból, hogy hol találja a keresett dll-t! Pl. így:
FbConnectionStringBuilder Csb = new FbConnectionStringBuilder();
Csb.Database = Request.PhysicalApplicationPath + "App_Data\\DATA1.GDB";
Csb.Password = "masterkey";
Csb.ServerType = FbServerType.Embedded;
Csb.UserID = "SYSDBA";
Csb.Charset = "UTF8";
Csb.ClientLibrary = Request.PhysicalApplicationPath + "bin\\fbembed.dll";
Igen a fentiekben a ClientLibrary a legérdekesebb rész. Ez a 2.5-ös verziótól kezdve található meg a lehetőségek között. Az is fontos, hogy a teljes útvonalat adjuk, mert relatív útvonalak alapján megint csak nem találja meg. Erre szolgál a PhysicalApplicationPath a Request-en belül.
Persze akad ezzel egy kis kód szervezési kérdés is. Request objektuma a page-nek van. Ha az ember nem akarja minden oldalba bekódolni a kapcsolódást (és remélem, hogy senki nem akarja) akkor várhatóan minden oldalon ahonnan kérést indítunk át kell adni a teljes útvonalat is kapcsolat felépítéséhez...
Ahhoz, hogy a fenti kódolás működjön természetesen a dll-eket is be kell másolni a bin mappába. Fontos, hogy ne csak az fbembed.dll-t tegyük oda, hanem a kapcsolodó többi szükséges dll-t. Nevezetesen:
icudt30.dll
icuin30.dll
icuuc30.dll
És én még azt is oda teszem, amelyekben a hibaüzenetek vannak, igaz ez nem dll:
firebird.msg
Még egy fontos dolog. Ilyen mondás ne szerepeljen az adatbázisunkban, mert érdekes hibákhoz vezet: alter character set utf8 set default collation unicode_ci_ai
Elvben a ConnectionString-ben megadott utf8 charset elég az "árvíztűrő tükőfúrógéphez" :)