Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/12/2007, 17h59   #1
Nouveau Membre du Club
 
Homme
Inscription : mars 2007
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2007
Messages : 91
Points : 38
Points : 38
Par défaut Problème de paramétrage de SQL avec NpgSQL.

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:
Code :
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é :
Code :
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 :
Citation:
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
Code :
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
Jean-Marc68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 11h36   #2
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 64
Points : 19
Points : 19
Citation:
Envoyé par Jean-Marc68 Voir le message
Salut à toutes et à tous,
Soit le même code paramétré :
Code :
1
2
3
4
5
6
7
8
9
10
 
    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));
Cette requête paramétrée me renvoit cette erreur :


Je ne comprend pas d'où sort ce E' en avant du nom de la table.

De plus, si j'écris
Code :
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

franchement ,je ne vois pas non plus d'où vient le E mais je te suggère de garder le paramètrage et seulement d'enlever les ":" avant table et mandat donc la requête devient :
requete = "SELECT * FROM table WHERE num_mandat = mandat ORDER BY num_rafa";

puisque ,le messages t'a donné les deux lignes où il ya les variables precedées des ":" comme sources de l'erreur ;et si tu vois bien,il ya des quotes qui encadrent le nom de la table "E'reno_rafas'" c'est comme si il ya une concatenation,selon moi c'est dû aux ":"
essaie donc la requête sans deux points.
je ne sais pas si j'ai apporté un plus et informe nous si tu résous le problème
tatikambwa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h10.


 
 
 
 
Partenaires

Hébergement Web