Bonjour,

Je vous contacte suite à un problème bloquant rencontré avec SQLite.
Je n'arrive pas à activer les clé étrangères avec ce SGBD.

Contexte:
Framework utilisé: 3.5 de .NET avec le langage C#.
Provider utilisé: ADO.NET 2.0 Provider for SQLite.
http://sqlite.phxsoftware.com/
Moteur de SQLite du provider: 3.6.23.1
Remarque: La gestion des clés étrangères à été ajouté à partir de la 3.6.19. Source: http://www.sqlite.org/foreignkeys.html#fk_actions
Visual Studio 2008.
La chaîne de connexion à la BDD:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 /// <summary>
        /// Repertoire de la BDD
        /// </summary>
        public const string repertoireBDD = "";
        /// <summary>
        /// Chemin complet de la base avec son nom
        /// </summary>
        public const string dbSQLite = repertoireBDD + "dbSQLite.s3db";
        /// <summary>
        /// Chaine de connexion a la BDD
        /// </summary>
        /// <remarks>
        /// Pour trouver la chaine de connexion lie a la BDD, aller ici:
        /// http://www.connectionstrings.com/ 
        /// </remarks>
        public const string connectStringSQLite = "Data source=" + Config.Database.dbSQLite; //+ ";UseUTF16Encoding=True";

Le code test pour vérifier, activer les clés étrangères et enfin vérifier cette activation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  string sql = "PRAGMA foreign_keys;"; 
            DbConnection connect = Data_Access_Object.DatabaseDAO.getConnection(Config.Database.providerBDD);   
            connect.Open(); 
            DbCommand dbCommand = Data_Access_Object.DatabaseDAO.createCommand(sql); 
            Object res = dbCommand.ExecuteScalar(); 
            String resString = Convert.ToString(res); 
            Console.WriteLine("\nResultat du pragma: " + resString); 
            connect.Close(); 
 
            string sql2 = "PRAGMA foreign_keys=on;"; 
            connect.Open(); 
            DbCommand dbCommand2 = Data_Access_Object.DatabaseDAO.createCommand(sql2); 
            dbCommand2.ExecuteNonQuery(); 
            connect.Close(); 
 
            connect.Open(); 
            Object res3 = dbCommand.ExecuteScalar(); 
            String resString3 = Convert.ToString(res3); 
            Console.WriteLine("\nResultat du pragma après le ON: " + resString3); 
            connect.Close();
La sortie de ce code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Resultat du pragma: 0
 
Resultat du pragma après le ON: 0
Comme on peut le voir sur la sortie, le résultat après l'activation est à 0. Or il devrait être à 1, ce que je ne comprend pas.

Si quelqu'un a une idée sur la raison de cette non activation, je suis preneur !