ADO.NET avec SQLite, problème d'activation des clés étrangères (foreign key)
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:
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:
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:
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 !