Bonjour a tous,
Je me casse la tète a essayer de comprendre pourquoi le code ci-dessous génère une exception:
Donc... Ce code est sensé aller lire le nom des colonnes de la table passée en paramètre.
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 public static List<string> ReadColumnsName(string table) { // note: par exemple, table = "material" var result = new List<string>(); try { using (SQLiteConnection con = new SQLiteConnection(SessionData.Instance.ConnectionString, true)) using (SQLiteCommand cmd = new SQLiteCommand(con)) { cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = SQLiteQueries.Query_ReadColumnsNames; //SQLiteQueries.Query_ReadColumnsNames = @"PRAGMA table_info(@table)"; cmd.Parameters.Add(new SQLiteParameter("@table", table)); // pour esayer de debugger, affichage de la query complete dans la console. string query = cmd.CommandText; foreach (SQLiteParameter p in cmd.Parameters) query = query.Replace(p.ParameterName, p.Value.ToString()); Console.WriteLine(query); // output : PRAGMA table_info(material) con.Open(); // la ligne suivante genere un SQLiteException : SQLite error (1): near "@table": syntax error using (SQLiteDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { result.Add(rdr.GetString(rdr.GetOrdinal("name"))); } } con.Close(); } } catch (Exception) { return null; } return result; }
J'instancie la connexion, j'instancie la commande, je lui passe une string, je lui passe le paramètre qui va bien.
Si je remplace la requête par un "select * from @table", j'ai la même erreur.
Si je change @table par @pouet (on ne sait jamais, après tout, table est un mot réservé pour SQLite), pareil, SQLite error (1): near "@pouet": syntax error.
Si je force la commande ( en enlevant le paramètre) en écrivant SQLiteQueries.Query_ReadColumnsNames = @"PRAGMA table_info(material)";, cela marche très bien.
Si j’exécute la même requête SQL dans un outil externe, genre DB Browser fr SQLite, cela marche très bien.
Je ne comprends vraiment pas pourquoi l'utilisation du paramètre provoque cette erreur.
Si quelqu'un peut m’éclairer, merci de me pointer mon erreur.
Partager