Plusieurs accès à une base de données SQLite fichier via le Système.Les données.SQLite et c#
Que je peux lire à partir de SQLite FAQ il prend en charge de multiples processus de lecture (SELECT) et un seul processus d'écriture (INSERT, UPDATE, DELETE) de la base de données à tout moment dans le temps:
SQLite utilise un lecteur/graveur de serrures pour contrôler l'accès à la base de données.
Lors de tout processus veut écrire, il doit verrouiller l'ensemble du fichier de base de données
pour la durée de sa mise à jour. Mais qui, normalement, ne prend que quelques
millisecondes. D'autres processus juste attendre sur l'écrivain pour finir alors
continuer sur leur entreprise
Je suis en utilisant Système.Les données.SQLite adaptateur via c#.
Quelqu'un pourrait-il expalin moi plz, comment exactement ce processus est en marche?
Ce processus fera fonctionner automatiquement et de l'écriture SQLiteCommand va simplement attendre si il y a un autre écrit SQLiteCommand déjà en cours d'exécution sur la même base de données?
Ou peut-être qu'il va lever une exception? Quel genre de?
Désolé, mais je n'ai trouvé aucune informations à propos de cette mécanique 🙂
Merci.
Mise à JOUR:
J'ai trouvé le post en disant que exception sera levée avec un code d'erreur
Est que l'énoncé correct?
- Pas encore 🙂 je préfère lire des tutoriels avant de codage à obtenir les optimiser et corriger des solutions...
- Si vous préférez
optimized and correct solutions
ne pas utiliser SQLite pour quelque chose, il n'a pas été optimisé pour; c'est une grande base de données, mais une grande multi-utilisateur de la base de données il n'est pas. - J'ai besoin d'gratuit et léger (je veux dire zéro cofiguration et sans serveur) de la base de données pour mon projet. Donc, la plupart des "multi-optimisé" les bases de données ne sont pas adaptés pour moi 🙂
Vous devez vous connecter pour publier un commentaire.
Je l'ai étudié par moi-même:
J'ai créé un exemple de base de données SQLite
c:\123.db
avec une tableCategories
contenant deux champs:ID
(de type uniqueidentifier) etName
(de type nvarchar).J'ai ensuite écrit certains multi-thread code émuler plusieurs accès en écriture à la base de données (n'oubliez pas d'ajouter un
System.Data.SQLite
référence à votre projet si vous utilisez ce code):Le résultat sur mon Core2Duo E7500 est que l'Exception n'est jamais soulevée!
Ressemble SQLite est optimisé assez pour mes besoins (verrouillage/déverrouillage est vraiment rapide et normalement ne prend que quelques millisecondes SQLite FAQ nous dit) - les Grandes!
Noter qu'il n'est pas nécessaire pour récupérer un entier ErrorCode pour un
SQLiteException
- vous pouvez utiliser un enumReturnCode
champ de la place. Tous les codes sont décrits ici.Espère que cette information pourra aider quelqu'un.