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:
La sortie de ce code:
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();
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.
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
Si quelqu'un a une idée sur la raison de cette non activation, je suis preneur !
Partager