J'essaie de localiser un problème de corruption de base de données dans un projet C # à l'aide de Dapper et SQLite. Je cherche donc un moyen de vérifier l'intégrité de la base de données dans le code. J'ai trouvé plusieurs endroits disant que je peux envoyer la commande "PRAGMA Integrity_check" pour cela, mais la fonction Dapper Execute ne renvoie qu'un entier pour le nombre de lignes effectuées, ce qui n'a pas vraiment de sens ici (et semble simplement renvoyer 0 ).
Y at-il un moyen de faire cette vérification d'intégrité ou quelque chose de similaire?
Je ne connais pas bien Dapper, mais si vous utilisez SQLite 3.16.0 ou une version plus récente, je pense que vous avez au moins une option. Peut-être 2. Depuis la version 3.16.0, SQLite a une nouvelle fonctionnalité expérimentale appelée fonctions PRAGMA .
Cela signifie essentiellement que vous pouvez maintenant utiliser les PRAGMA
intégrés sans effets secondaires sous PRAGMA
de tableaux. Par exemple, en plus de l'ancienne syntaxe:
PRAGMA integrity_check;
Maintenant, vous pouvez également vérifier l'intégrité de la base de données comme ceci:
SELECT integrity_check FROM pragma_integrity_check();
Ou:
SELECT * FROM pragma_integrity_check();
Donc, si vous pouvez exécuter des commandes SELECT
sur des tables arbitraires via Dapper et accéder à leurs résultats, c’est tout.
Mais si vous ne le pouvez pas et que la seule information que vous obtenez est simplement le nombre de lignes affectées, il existe toujours une solution. Vous pouvez construire une requête qui supprime 1 ligne si integrity_check
est 'ok' et 0 lignes si ce n'est pas le cas:
DROP TABLE IF EXISTS Dummy;
CREATE TABLE Dummy as SELECT 'ok' as Value;
DELETE FROM Dummy WHERE Value = (SELECT * FROM pragma_integrity_check());
Cela fonctionne pour moi sur la version 3.25.3 de SQLite, mais comme je l'ai dit, il ne s'agit que d'une fonctionnalité expérimentale soumise à des modifications, la syntaxe exacte pouvant être différente ou non.