Rammi.cz

Rammi.cz náhodný obrázek

Jak správně embeednout SQL server CE

Listopad 17th, 2010 · Zatím nejsou komentáře · Programování

nuly a jedničky Volné chvíle posledních několika měsíců trávím programováním aplikace v C#, kterou plánuji vypustit jako shareware. Nikdy předtím jsem komerční aplikaci pro desktop nedělal, takže to byla (a stále je) pro mne docela výzva.
Nicméně se projevil fakt, že jakmile už umíte programovat (a k tomu se přiznávám), je téměř jedno co, nebo v čem programujete. viz článek php je průser.

No ale teď jsem pěkných pár hodin zasvětil hledání řešení jak přiložit ke své Winforms C# aplikaci Microsoft SQL server Compact Edition tak, aby si uživatel nemusel nic instalovat. A protože jsem to vyřešil, píšu si to sem, do své knowledgebase, abych to příště nemusel hledat znova 🙂

Upozornění: Dál nečtěte, pokud to nepotřebujete, je to ztráta času 😉

Upozornění 2: Toto je pouze volný překlad a je velmi zkrácený a zjednodušený. Pokud vás zajímá podrobnější vysvětlení problematiky, přečtěte si originál.

  1. Přidejte assembly reference
    Jděte do referencí vašeho projektu. Pokud tam ještě nemáte System.Data.SqlServerCe.dll, referenci přidejte.

    1. Klikněte pravým na reference, klikněte na „Add Reference“ a vyberte System.Data.SqlServerCe z první záložky .NET, dejte OK
    2. Znova klikněte na „Add Reference“, ale tentokrát klikněte na Browse, pro nalezení souboru.
      Jděte na: C:\Program Files\Microsoft SQL Server Compact Edition\v3.5 a vyberte System.Data.SqlServerCe.Entity.dll
      Tento soubor je stejný pro 64 i 32 bit aplikace.
  2. Změnte uložení referencí na „local“
    1. Na uzlu References, vyberte System.Data.SqlServerCe a v properties změnte: Copy Local = True.
    2. Stejně tak System.Data.SqlServerCe.Entity: Copy Local = True.
  3. Přidejte native runtime knihovny.
    Od verze 3.5 SP1 má SQL server CE také 64 bit verzi. Nejlepší řešení je přidat do vaší aplikace obě verze (32 i 64)

    1. Pro přidání 32 bit runtime: Vytvořte v projektu adresář X86.
    2. Klikněte na něj pravým a vyberte „Add Existing Item“,
      nalistujte: C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5
      (pokud máte 32 bit windows, tak C:\Program Files\Microsoft SQL Server Compact Edition\v3.5)
    3. Použitím CTRL + Click, vyberte sqlcese35.dll, sqlceqp35.dll, sqlceme35.dll a sqlcecompact35.dll,
      potom klikněte na malou šipečku na tlačítku Add a vyberte Add as link.
    4. Označte všechny tyto 4 soubory v solution exploreru a vyberte properties.
    5. Změnte: Copy To Output Directory = Copy If Newer
    6. Pokud máte nainstalovanou 64 bit verzi, můžete přidat také 64bit knihovny.
      Pokud nemáte, můžete si uvedené soubory stáhnout k sobě z jiného (64 bit) stroje.

      1. Vytvořte ve vašem projektu adresář AMD64.
      2. Klikněte na něj pravým a vyberte „Add Existing Item“, nalistujte cestu k 64 bit knihovnám:
        C:\Program Files\Microsoft SQL Server Compact Edition\v3.5
        (pokud máte 32 bit windows, tak si musíte opatřit tyto soubory jinde)
      3. Použitím CTRL + Click, vyberte sqlcese35.dll, sqlceqp35.dll, sqlceme35.dll a sqlcecompact35.dll,
        potom klikněte na malou šipečku na tlačítku Add a vyberte Add as link.
      4. Označte všechny tyto 4 soubory v solution exploreru a vyberte properties.
      5. Změnte: Copy To Output Directory = Copy If Newer
  4. Dále je třeba správně nastavit app.config
    1. Otevřete si soubor machine.config z:
      C:\Windows\Microsoft.NET\Framework\vase verze frameworku\CONFIG
    2. vyhledejte „SQL Server Compact“
    3. Zkopírujte celý uzel
    4. Otevřete si app.config vaší aplikace, a vložte tam zkopírovaný uzel
    5. Mělo by to vypadat nějak takto:
      šedý text je něco co už tam pravděpodobně máte, barevný je ten, o kterém se bavíme:

       
         
       
        <system.data>
          <DbProviderFactories>
            <remove invariant=System.Data.SqlServerCe.3.5></remove>
            <add name=Microsoft SQL Server Compact Data Provider 
                 invariant=System.Data.SqlServerCe.3.5 
                 description=.NET Framework Data Provider for Microsoft SQL Server Compact 
                 type=System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91/>
          </DbProviderFactories>
        </system.data>
      </configuration>

No a nakonec ještě výpis errorů, z eventlogu, díky kterým jsem toto řešení našel:

Faulting application name: application.exe, version: 0.5.0.0, time stamp: 0x4ce3591f
Faulting module name: KERNELBASE.dll, version: 6.1.7600.16385, time stamp: 0x4a5bdfe0
Exception code: 0xe0434352
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.BadImageFormatException
Stack:
   at System.Data.SqlServerCe.NativeMethods.DllAddRef()
   at System.Data.SqlServerCe.SqlCeConnection..ctor(System.String)
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Data.SqlServerCe.SqlCeException
Stack:
   at System.Data.SqlServerCe.NativeMethods.LoadNativeBinaries()
   at System.Data.SqlServerCe.SqlCeConnection..ctor()
   at System.Data.SqlServerCe.SqlCeConnection..ctor(System.String)
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:
   at class.GetDataTable(System.String)

Jak bude reklama vypadat?
-
Kup si reklamu navždy pod tímto článkem jen za 140 Kč
Zobrazit formulář pro nákup

Tagy: ··

Napiš první komentář! ↓

Zatím tu není žádný komentář... Odstartuj to vyplněním formuláře níže.

Co si myslíš ty?

Copyright Abago Holding s.r.o.,
všechna práva vyhrazena.
Navštivte také další projekty: Služby:  Digi Reality - Realitní vyhledávač | Ušetřím.cz - Vyhledávač cen | Inzerce Dýně.cz - Inzerce zdarma | Moderní svět - Nejen o technologiích
Zábava: PeckaSMS.cz - vyhrajte super ceny | 101her.cz - Online hry zdarma |
TOPlist