2010-03-11 6 views
5

J'ai entendu dire qu'il est préférable d'avoir une connexion ouverte au démarrage de l'application et de la fermer lorsque l'application s'arrête.Windows Mobile Compact Framework SqlCeConnection

Quel genre de problème peut se produire avec plusieurs connexions?

Y a-t-il des articles où il est préférable d'avoir une connexion?

Quelle est votre expérience avec sql ce?

Répondre

2

Dans notre application SQL CE 3.5/Compact Framework 3.5, nous ouvrons une connexion au démarrage et la gardons ouverte jusqu'à la fermeture de l'application. La base de données est requise pour presque chaque interaction utilisateur dans l'application et le maintien de la connexion est plus rapide que l'ouverture et la fermeture à la demande.

Toutes les mises à jour de données sont effectuées dans des transactions. Nous Commit les transactions en utilisant l'option CommitMode.Immediate. Cela garantit que les modifications de données sont immédiatement vidées dans le fichier, ce qui minimise le risque de perte de données.

2

Cela dépend vraiment. Pour les performances, SQL CE fonctionne mieux s'il existe toujours une connexion en direct à la base de données, car le moteur n'a pas à tout accumuler chaque fois que vous vous connectez. Avoir une connexion unique, cependant, conduit à flushiong paresseux de données dans le fichier, et une plus grande probabilité de perte de données ou de corruption en cas de défaillance catastrophique.

J'ai tendance à ouvrir une connexion «factice» à la base de données au démarrage de l'application et j'ai toujours cette connexion ouverte mais rarement ou jamais réellement utilisée. Cela maintient le moteur "amorcé" si vous voulez. Puis, pour l'accès réel aux données, j'utilise une connexion distincte et gère l'état en fonction de l'activité que je fais, en la laissant généralement ouverte à plusieurs requêtes (une pseudo-transaction si vous voulez), mais sans l'ouvrir indéfiniment.

+0

Vous pouvez modifier le comportement de rinçage paresseux de deux manières. Lorsque vous appelez 'Commit' sur un' SqlCeTransaction', vous pouvez 'CommitMode.Immediate' pour vider la transaction immédiatement (http://msdn.microsoft.com/en-US/library/esdw1h9d.aspx). Il existe également une option 'flush interval' sur la chaîne de connexion (http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring.aspx). –

+0

Que voulez-vous dire par "amorcée" ?? – pdiddy

+1

Je cherchais n'importe quel document public sur ceci, mais tout ce que je peux trouver est un email privé d'un dev sur l'équipe de SQL CE. Fondamentalement, la première connexion à une base de données initialise certains objets en interne et toutes les autres connexions les utilisent. La création et la conservation d'une connexion génère ces objets pour une utilisation par toutes les connexions suivantes (améliorant ainsi les performances). – ctacke