0

J'ai récemment découvert l'awesomeness de SQLite, en particulier l'encapsuleur .NET pour SQLite à http://sqlite.phxsoftware.com/. Maintenant, supposons que je développe un logiciel qui fonctionnera sur plusieurs machines sur le même réseau. Rien de fou, probablement seulement 5 ou 6 machines. Et chacune de ces instances du logiciel va accéder à une base de données SQLite stockée dans un fichier dans un répertoire partagé (est-ce une mauvaise idée? Si oui, dites-le moi!).Réception d'événements de mise à jour de base de données dans .NET à partir de SQLite

Existe-t-il un moyen de notifier chaque instance de l'application si une instance met à jour le fichier de base de données? Une façon évidente serait d'utiliser la classe FileSystemWatcher, de lire toute la base de données dans un DataSet, puis ... vous savez ... énumérer tout le contenu pour voir ce qu'il y a de neuf ... mais oui, cela semble plutôt idiot, réellement. Existe-t-il un fournisseur de mises à jour SQLite?

Est-ce que cela a même un sens en tant que question? Je suis aussi un débutant en ce qui concerne ADO.NET, donc je peux aborder le problème sous un angle complètement faux. L'utilisation de SQLite sur un réseau n'est pas une bonne idée.

Répondre

3

Consultez les recommandations de SQLite sur ce here.

Une base de données client-serveur sera beaucoup plus fiable et pourrait également résoudre votre problème de notification. Par exemple, PostgreSQL dispose d'un mécanisme de signalisation inter-client via les instructions NOTIFY et LISTEN, qui peuvent être utilisées directement depuis un client ou depuis une fonction, sproc ou trigger.

Même si vous décidez d'opter pour SQLite, n'utilisez pas d'API de surveillance de fichiers. Ils sont complètement cassés sur Windows en raison d'une condition de course profondément dans les entrailles du système de fichiers. A partir de l'entrée MSDN pour FileSystemWatcher:

Notez qu'un FileSystemWatcher ne soulève pas un événement d'erreur lorsqu'un événement est manqué ou lorsque la taille de la mémoire tampon est dépassée, en raison de dépendances avec le système d'exploitation Windows.

Il propose des recommandations pour remédier à cela, mais aucune d'entre elles n'offre de garanties de fiabilité.

+0

@Marcelo: Merci pour votre contribution. Au début, il semblait que SQLite offrait un excellent moyen de partager des données entre les processus sans devoir installer une base de données client-serveur. Maintenant, ça commence à ressembler à ça, c'est vraiment la seule façon de faire ça correctement. J'accepterai probablement cette réponse peu de temps après en avoir examiné un peu plus moi-même. –