Salut à toutes et à tous,
J'ai un problème avec le paramétrage d'une requête SQL.
Soit un code non paramétré qui fonctionne:
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 39 40
|
public class reno_rafas_par_mandat
{
private Connection_PostgreSQL db;
private NpgsqlCommand com;
private NpgsqlDataReader dr;
private string requete;
private string TABLE = "reno_rafas";
public reno_rafas_par_mandat(Connection_PostgreSQL db)
{
this.db = db;
}
public ArrayList SelectRafasParMandat(int MANDAT)
{
ArrayList arlist = new ArrayList();
if (db.getDbUp())
{
requete = "SELECT * FROM " + TABLE + " WHERE num_mandat = " + MANDAT + " ORDER BY num_rafa;";
com = new NpgsqlCommand(requete, db.getConnectionRessource());
dr = com.ExecuteReader();
int j = 1;
arlist.Insert(0, dr.FieldCount); // place le nombre de champs retournés dans le (0) du arraylist.
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
arlist.Insert(j, dr.GetValue(i));
j++;
}
}
return arlist;
}
else
{
Console.WriteLine("Base non connectée.");
return arlist;
}
} |
Soit le même code paramétré :
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 39 40 41 42 43 44
|
public class reno_rafas_par_mandat
{
private Connection_PostgreSQL db;
private NpgsqlCommand com;
private NpgsqlDataReader dr;
private string requete;
private string TABLE = "reno_rafas";
public reno_rafas_par_mandat(Connection_PostgreSQL db)
{
this.db = db;
}
public ArrayList SelectRafasParMandat(int MANDAT)
{
ArrayList arlist = new ArrayList();
if (db.getDbUp())
{
requete = "SELECT * FROM :table WHERE num_mandat = :mandat ORDER BY num_rafa;";
com = new NpgsqlCommand(requete, db.getConnectionRessource());
com.Parameters.Add(new NpgsqlParameter("table", DbType.String));
com.Parameters.Add(new NpgsqlParameter("mandat", DbType.Int32));
com.Parameters["table"].Value = TABLE;
com.Parameters["mandat"].Value = MANDAT;
dr = com.ExecuteReader();
int j = 1;
arlist.Insert(0, dr.FieldCount); // place le nombre de champs retournés dans le (0) du arraylist.
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
arlist.Insert(j, dr.GetValue(i));
j++;
}
}
return arlist;
}
else
{
Console.WriteLine("Base non connectée.");
return arlist;
}
} |
Cette requête paramétrée me renvoit cette erreur :
ERROR: 42601: syntax error at or near "E'reno_rafas'"
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: Npgsql.NpgsqlException: ERROR: 42601: syntax error at or near "E'reno_rafas'"
Erreur source:
Ligne 33 : com.Parameters["table"].Value = TABLE;
Ligne 34 : com.Parameters["mandat"].Value = MANDAT;
Ligne 35 : dr = com.ExecuteReader();
Ligne 36 : int j = 1;
Ligne 37 : arlist.Insert(0, dr.FieldCount); // place le nombre de champs retournés dans le (0) du arraylist.
Je ne comprend pas d'où sort ce E' en avant du nom de la table.
De plus, si j'écris
com.Parameters["table"].Value = "reno_rafas";
je reçois toujours l'erreur.
En fait, le seul moyen de ne plus l'avoir est retirer le paramétrage de la table dans la requête SQL.
Quelle est mon erreur ?
Je ne comprend pas.
PS : J'ai essayé aussi en changeant le nom du paramètres, au cas ou le mot table aurait été dérangeant, mais ça n'a rien changé.
Merci de vos z'avis z'avisés,
Jean-Marc
Partager