W VS 2010 możemy dodać Local Database do naszego projektu:

SqlCeHelper

Gdybyśmy teraz chcieli ją wykorzystać z poziomu SQL Server CE 4.0 to najprawdopodobniej dostaniemy taki o to błąd:

The database file has been created by an earlier version of SQL Server Compact. Please upgrade using SqlCeEngine.Upgrade() method.

Jest to spowodowane tym, iż dopiero VS 2010 SP1 będzie wspierał CE w wersji 4.0.

Obejście problemu jest proste. Jeżeli mamy już bazę danych i chcemy ją zaktualizować wystarczy, że wykonamy następujące zapytanie:

SqlCeEngine engine = new SqlCeEngine("Data Source=File.sdf");
engine.Upgrade(); // in-place update
engine.Upgrade("Data Source=File4.sdf"); // save updated db in another file

Zaś jeżeli chcemy stworzyć nową, to wystarczy:

SqlCeEngine engine = new SqlCeEngine("Data Source=File.sdf");
engine.CreateDatabase();

Teraz już możemy spokojnie korzystać z wersji 4.0.

Warto także o tym wiedzieć przy Unit Testach, mały trick może zaoszczędzić zbędnych exceptions czy też naszych juniorów zająć na cały dzień pracy ;) Czas utworenia czy też aktualizacji DB u mnie jest nie zawuażalny – jak jak wcześniej pisałem, mam trochę mocny sprzęt.

4 KOMENTARZE

  1. A jak wygląda kwestia powrotu (do poprzedniej wersji)?
    Teraz baza jest nie do otwarcia.

    Bazę wygenerowałem ze skryptu/kodu (ManagementStudio Express 2008R2 – schemat, Enterprise Library 5.0 plus trochę kodu – dane).
    Dokonałem konwersji na wersję 4.0 (mam zainstalowany SP1 do VS2010 Express).

    W zasadzie pytam z czystej ciekawości, bo w wersji 3.5 wydajność nie jest do zaakceptowania w tym konkretnym przypadku: mam kilka tabel ale z setkami tysiecy – kilkoma milionami wierszy. Jedno zapytanie – nie doczekałem się na wynik – trwało ponad 20 minut.
    Klasyczny SQL server daje sobie spokojnie radę ale dużym minusem jest konieczność jego instalacji.
    A obsługa CE 4.0 jest problematyczna.

  2. ogolnie downgrade robi sie juz za pomoca skryptow a nie kodu tutaj na SO mozna znalezc odp jak to zrobic: http://bit.ly/ihRtJ2

    Zas co do obslugi z poziomu VS, to wydaje mi sie ze VS 2010 Web Developer Express ma taka mozliwosc (z edycji Express, przynajmniej Scott Gu mowi, ze ma), nie wiem jak C# express i reszta rodziny express bo z nich nie korzystam :(

    Zas co do wydajnosci – przy kilku milionach wierszy nie sadze aby byla az taka roznica w wydajnosci. Ale zawsze wrazie koniecznosci mozna zrobic latwa migracje do SQL Server Express i zyskac na wydajnosci – minus jak wspominasz, instalka :(

  3. Dzięki. Nie doczytałem o tym dodatku – jak wspominałem samego SP już zainstalowałem, czytałem też na blogu Scott-a o expressach.
    Zobaczę wieczorem, czy zadziała.
    Wydajność – w tym konkretnym wypadku – zależy od indeksów. Na Express za pomocą planów zapytań powinienem je zoptymalizować (te zapytania). Na CE nie mam doświadczenia.

Comments are closed.