SSCE címkéhez tartozó bejegyzések

Déja vu és SSCE

Letöltöttem az új Windows Mobile Device Center 6.1-et, hogy a Windows Mobile-os telefonomat tudjam szinkronizálni az Outlokkal és sajnos az élmény tisztára az ActiveSynces időkre emlékeztet: elég sűrűn szól, hogy gáz van babám, húzd ki és dugd be újra. Ami még ennél is rosszabb, hogy frissítés után nem látta az összes Outlook mappámat, így az RSS feedeket nem tudtam a telefonomra szinkronizálni. Újraindítás nem használt, mit tehet az ember, partnership törlése és újra felvétele, valamint sok fenti hibaüzenet leokézása után most látszólag működik.

Úgy gondolnám ez egy tipikus felhasználói szkenárió, aminek illene működnie és talán fontosabb, mint hogy saját képet tudjak megjeleníteni a telefonomról, mert azt bezzeg lehet.

Épp ezt a hackelést néztem, amikor a C:Users<én>AppDataRoamingMicrosoftActiveSyncProfiles<profileID> mappában megláttam egy user.sdf nevű fájlt. Aki használta már az SQL Server 2005 Compact Editiont, vagy olvasta a múltkori szösszenetemet, annak talán velem együtt az SDF-ről a Single Data File ugrik be. Nosza le is másoltam és a Visual Studio 2005 Server Explorerében létrehoztam egy új kapcsolatot, hogy megnézzem a tartalmát és valóban: 10 tábla van benne. Tele vannak GUID-okkal és bináris mezőkkel, amire nálam a VS 2005 kiakadt smile_sad Lehet, hogy más SQL verziót használnak?

Megnéztem a C:WindowsWindowsMobile mappát, de ott nem láttam SSCE-re utaló DLL-eket, arra pedig már nem volt kedvem, hogy Process Explorerrel utánajárjak a dolognak.

Azért azt jó látni, hogy a Microsoft is használja a saját dolgait, a minőség viszont még fejlődhetne…

 

Technorati tags: ,
Reklámok

SQL Server 2005 Compact Edition – első lépések

Van a Microsoftnak több adatkezelő motorja, ezek közül talán az SQL Server 2005 Compact Edition (SSCE) a legszimpatikusabb: ő egy in-process adatbázis motor (tehát nem service), mindössze 5 MB memória és 2 MB diszk igénnyel (a hivatalos adatok szerint). Persze vannak korlátai is, egy felhasználós, egy fájlos adatbázist tud kezelni és sajnos nem ismeri a tárolt eljárásokat, ami azért sajnálatos, mert ahogy május 24-én említettem, a LINQ to SQL egyelőre nem támogatja az SSCE-t. Azért még ezekkel a megkötésekkel is időnként jól jön egy olyan adatbázis motor, amit nem kell telepíteni, csak felmásolni a DLL-jeit, amihez az adatbázist nem kell attachelni, csak odamásolni és amit a szokásos SQL parancsokkal le tudunk kérdezni.

Íme egy kis segítség az első lépésekhez:

Mivel olvasott embernek párja nincs, legalább a 2 oldalas datasheetet érdemes elolvasni annak, aki még nem ismeri ezt a terméket. Kicsit hosszabb, de lényegesen hasznosabb a Data Storage Architecture doksi, azt inkább ajánlom.

Ha már elég tettrekésznek érezzük magunkat, akkor először is célszerű letölteni azt a csomagot, ami a Visual Studioba beépülő editor támogatást is tartalmazza.

Ha ez megvan és végignyomkodtuk a next-next-finish varázslót, ideje megkeresni a Studioban, hogyan is tudjuk hozzáadni ezt a szolgáltatást egy projektünkhöz. Mivel WinFormsos tutorialok vannak az MSDN-en, most inkább azt nézzük, hogy egy mezei konzol alkalmazásnál mit kell tennünk.

Az új alkalmazás létrehozása után kell egy referenciát adnunk a System.Data.SqlServerCe szerelvényre. Ennek a helye önmagában is érdekes:

  • Lehet a GAC-ban, mert – a leírás szerint legalábbis – a Microsoft MSI telepítője odateszi. Ha ott van, azért remek, mert onnan tud Windows Update-elődni.
  • Lehet a C:Program FilesMicrosoft Visual Studio 8Common7IDE vagy az alatt a PublicAssemblies mappában. A fene se érti mit keres itt, nálam ide települt.
  • Lehet bárhol, hiszen csak egy szerelvény referenciára van szükségünk.

A következő lépésben természetesen usingolni kell:

    using System.Data.SqlServerCe;

Ezek után a történet a szokásos, kell egy connection, annak egy connection string, ami ezúttal nem adatbázisra, hanem fájlra mutat. Egyébként érti az ASP.NET-ben megszokott |DataDirectory| formátumot is (@"Data Source = |DataDirectory|Northwind.sdf").

    SqlCeConnection conn = new SqlCeConnection( "Data Source=Northwind.sdf" );

SDF, mint single data file. Honnan lesz Northwind példafájlunk? Onnan, hogy megtaláljuk a C:Program FilesMicrosoft Visual Studio 8SmartDevicesSDKSQL ServerMobilev3.0 mappában. A fájlt hozzáadva a solutionhöz, majd duplán kattintva rá, tudjuk szerkeszteni a táblákat és az adatokat a Server Explorerben, csakúgy, mint a nagy SQL Server esetén. Ezzel kapcsolatban egy tapasztalat: ha a Server Explorerben nem zárjuk le a kapcsolatot, a Setup project nem veszi hozzá az SDF fájlt a telepítőhöz a setup project buildelése közben és persze hibaüzenetet sem küld.

Ezek után jöhet a command, ami nem lehet tárolt eljárás, de paraméterezett lekérdezés igen:

    SqlCeCommand cmd = new SqlCeCommand( 
"SELECT [Company Name], [Contact Name] FROM Customers WHERE City=@City", conn ); cmd.Parameters.AddWithValue( "@City", "London" );

A query megszülésében a VS tud segíteni: jobb klikk a Server Explorerben az adatbázison, majd a New Query menüpontot választva jön az ismerős Query Builder ablak, ahol összekattintgathatjuk, majd kikopipésztelhetjük az SQL lekérdezést.

Végül jön a szokásos megnyitás, futtatás, lezárás, ami mezei demó kódban így fest:

    conn.Open();

    SqlCeDataReader reader = cmd.ExecuteReader();
    while( reader.Read() )
    {
        Console.WriteLine( "{0,-30}{1}", reader[ "Company Name" ], reader[ "Contact Name" ] );
    }

    reader.Close();
    conn.Close();

Aki nem konzol alkalmazásból akarja használni, hanem mondjuk WinFormsban akar bűvészkedni, annak is gondja lehet azzal, hogy az Add New Item dialógus ablakban nem tud SDF fájlt hozzáadni a projekthez. A trükk az, hogy a Data -> Show Data Sources ablakból kell elindulni és fel kell venni egy új Database típusú adatforrást, aminek a konfigurálásakor Microsoft SQL Server 2005 Compact Editiont kell kiválasztani, ami után a következő ablakban már találunk egy Create gombot.

A Data Sources ablakból lehet egyébként ugyanúgy lehet varázsolgatni egy WinForms alkalmazásban, ahogy azt SQL Servernél vagy Expressnél megszoktuk, erről van itt néhány tutorial. Aki pedig a DataSet jellegű megközelítést szereti, az élvezkedhet az SqlCeResultSet osztállyal.

A fenti kódot tartalmazó projekt forráskódja a devPORTALról tölthető le.

Technorati tags: ,