2010-03-11 15 views
5

Ich höre, dass es besser ist, eine Verbindung geöffnet zu haben, wenn die App gestartet und geschlossen wird, wenn die App heruntergefahren wird.Windows Mobile Compact Framework SqlCeConnection

Welche Art von Problem kann mit mehreren Verbindungen auftreten?

Gibt es irgendwelche Artikel da draußen, dass es am besten ist, eine Verbindung zu haben?

Was sind Ihre Erfahrungen mit SQL Ce?

Antwort

2

In unserer SQL CE 3.5/Compact Framework 3.5-Anwendung öffnen wir beim Start eine Verbindung und halten sie offen, bis die Anwendung geschlossen wird. Die Datenbank wird bei fast jeder Benutzerinteraktion in der Anwendung benötigt, und das Öffnen der Verbindung ist schneller als das Öffnen und Schließen bei Bedarf.

Alle Datenaktualisierungen werden in Transaktionen durchgeführt. Wir Commit die Transaktionen mit der CommitMode.Immediate Option. Dadurch wird sichergestellt, dass Datenänderungen sofort in die Datei übertragen werden, wodurch das Risiko von Datenverlusten minimiert wird.

2

Es kommt wirklich drauf an. Für die Leistung funktioniert SQL CE am besten, wenn es immer eine Live-Verbindung zur Datenbank gibt, da die Engine nicht bei jedem Verbindungsaufbau alles neu aufbauen muss.

Eine einzelne Verbindung führt jedoch zu einem verzögerten Datenfluss in die Datei und zu einer höheren Wahrscheinlichkeit von Datenverlust oder -beschädigung im Falle eines schwerwiegenden Fehlers.

Ich neige dazu, eine "Dummy" Verbindung zur Datenbank beim Start der Anwendung zu öffnen und diese Verbindung immer geöffnet zu haben, aber selten oder nie tatsächlich verwendet. Dies hält den Motor "grundiert", wenn Sie so wollen. Für den tatsächlichen Datenzugriff verwende ich eine separate Verbindung und verwalte den Status basierend auf der Aktivität, die ich mache. Normalerweise lasse ich ihn über mehrere Abfragen offen (eine Pseudotransaktion, wenn du so willst), aber lasse ihn nicht auf unbestimmte Zeit offen.

+0

Sie können das Lazy-Flush-Verhalten auf zwei Arten ändern. Wenn Sie 'Commit' für eine' SqlCeTransaction' aufrufen, können Sie 'CommitMode.Immediate' sofort die Transaktion löschen (http://msdn.microsoft.com/en-US/library/esdw1h9d.aspx). Es gibt auch eine 'flush interval'-Option für die Verbindungszeichenfolge (http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring.aspx). –

+0

Was meinst du mit "grundiert" ?? – pdiddy

+1

Ich suchte nach einem öffentlichen Dokument zu diesem Thema, aber alles, was ich finden kann, ist eine private E-Mail von einem Entwickler des SQL CE-Teams. Grundsätzlich initialisiert die erste Verbindung zu einer Datenbank einige Objekte intern und jede andere Verbindung verwendet diese. Durch Erstellen und Halten einer Verbindung werden diese Objekte für alle nachfolgenden Verbindungen erstellt (wodurch die Leistung verbessert wird). – ctacke