PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Problème de paramétrage de SQL avec NpgSQL sous C#

Technique - général | Problème de paramétrage de SQL avec NpgSQL sous C#

Par jean-marc68 le 03/12/2007 - 23:24

Salut à toutes et à tous,

J'ai un problème avec le paramétrage d'une requête SQL.
Dans un paramètre j'entre le nom d'une table puis ma requête est refusés parce qu'il y a un E qui s'est ajouté avant le nom de la table.

Soit un code non paramétré qui fonctionne:
------------------------------------------------------
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é :
------------------------------------------------------
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

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Echappement

SAS/ = 4 Décembre, 2007 - 11:49

Bonjour,

Le E' ' est la séquence d'échappement standard sur les nouvelles versions de PostgreSQL. N'y a-t-il pas un paramétrage de NpgSQL qui modifierait la façon dont les chaînes sont transmises ?

Librement,
Stéphane Schildknecht
dalibo
PostgreSQLFr


Paramétrage de npgsql ??

jean-marc68/ = 5 Décembre, 2007 - 16:45

Je n'ai aucune idée d'un paramétrage de npgsql.
S'il y en a un, je ne sais pas où il est.

Mais merci de ta réponse, parce que ça me permet d'arrêter de chercher dans mon code s'il n'y a pas qqch qui cloche. Je ne trouvais rien.

Jean-Marc


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.