SQL CE 4 problém s vícenásobným připojením   zodpovězená otázka

VB.NET, Databáze

Zdravím,

ve VB.NET 2012 Express mám udělanou třídu, kterou se připojuji do SQL CE databáze.

Jako Connection String mám

sqlConnection = New SqlCeConnection(String.Format("Data Source='{0}';Password='{1}';File Mode='Read Write'", DBfile, _pass))

Princip činnosti třídy, je že když jí zavolám ona otevře spojení s DB provede příkaz a DB zase zavře.

V samostatném vlákně mám spustěnou operaci načítání dat, které zapisuji do DB. Problém nastane v okamžiku kdy uživatel v okně spustí okno kde se načítají nějaké data z DB. Spadne to např. na to že spojení je již otevřené apod. Prostě nelze udělat 2 spojení s DB.

Pokud dám jako File Mode='Shared Read' okno se sice otevře, ale v okamkžiku kdy tam uživatel něco změní co se má zapsat do DB a běží proces na pozadí tak aplikace jde do kopru...

Nevíte někdo jak tento problém vyřešit?

Předem díky za rady..

Martin

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Četl jsem to 3x a pořád to nedává smysl...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co nedává smysl?

Pokud mám nastaveno File Mode='Read Write' tak by neměl být problém udělat např. 2 současný spojení do DB a provést např. 2 zápisy současně.

Podle tohodle odkazu to tak chápu:

http://msdn.microsoft.com/en-us/library/...

Read Write - Allows multiple processes to open and modify the database. This is the default setting if the mode property is not specified.

A problém je, že když se pokusím v jednom okamžiku odělat 2 spojení do DB či 2 zápisy tak aplikace vyhodí chybu např. že spojení je již otevřené a nebo cosi o poškození paměti.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak už jsem na to možná přišel.

V třídě jsem měl jeden společný SQLCeConnection pro všechny funkce a pokud jsem zavolal funkcni na provedení příkazu tak jsem chtěl použít společný SQLCeConnection a v tom došlo k chybě.

Upravil jsem to tak, že každá funkce na provedení příkazu si vytvoří svůj nový SQLCeConnection a je po problému.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A proč nevyužíváte například singleton s factory třídou? Takto se Vám akorát opakuje stejný kód, což není dobrý začátek.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To neznám. Můžu poprosit o nějaký odkaz či ukázku?

Je pravda že se mi zdálo, že při každým otevření a zavření dost hrabal disk. Ještě se na to budu muset podívat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Totální hovadina.

1) Někde by se neustále muselo držet otevřené SQLCeConnection, což odporuje Using...End Using filozofii.

2) Pokud by se to vytvořilo faktory metodou, potom by docházelo k stejnému problému, jaký řeší tazatel.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback