PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/08/2019 15:50:10

Jean-Marc68
Membre

select sur une vue via npgsql

Salut,

Je code en C# et je me lie à postgresql via npgsql (à jour, version 4.0.9).

Je n'ai aucun problème à accéder aux tables, mais lorsque je crée une vue et que je veux la lire, je reçois un message d'erreur me disant que la table n'existe pas (erreur 42P01)

Voici une vue dans postgresql

CREATE OR REPLACE VIEW public."OCTRencodees" AS 
 SELECT documents.num_document_cadastre AS no_octr,
    documents.minute,
    documents.date_minute,
    documents.ag,
    documents.matricule_ag
   FROM documents
  WHERE documents.type_document::text = 'OCTR'::text
  GROUP BY documents.num_document_cadastre, documents.minute, documents.date_minute, documents.ag, documents.matricule_ag
  ORDER BY documents.num_document_cadastre;

ALTER TABLE public."OCTRencodees"
  OWNER TO jmdeneyer;
COMMENT ON VIEW public."OCTRencodees"
  IS 'Donne la liste des OCTR encodées';

Voici le code de lecture de cette vue

public static MTObservableCollection<MinuteDocument> ListeOCTRencodés()
        {
            NpgsqlConnection conn = new NpgsqlConnection(Properties.Settings.Default.PostGISconnexionString);
            MTObservableCollection<MinuteDocument> listeOCTR = new MTObservableCollection<MinuteDocument>();
            string listeOCTRencodéssql = @"SELECT * FROM OCTRencodees;";
            NpgsqlCommand listeOCTRencodéscommand = new NpgsqlCommand(listeOCTRencodéssql, conn);
            NpgsqlDataReader listeOCTRencodésdr;

            try
            {
                conn.Open();
                using (listeOCTRencodésdr = listeOCTRencodéscommand.ExecuteReader())
                {
                    while (listeOCTRencodésdr.Read())
                    {
                        MinuteDocument octr = new MinuteDocument();
                        int noMandat = 0, noMatricule = 0;
                        DateTime dateMinute = new DateTime();
                        if (int.TryParse(listeOCTRencodésdr["no_octr"].ToString(), out noMandat))
                            octr.Numero = noMandat;
                        if (int.TryParse(listeOCTRencodésdr["matricule_ag"].ToString(), out noMatricule))
                            octr.Matricule = noMatricule;
                        if (DateTime.TryParse(listeOCTRencodésdr["date_minute"].ToString(), out dateMinute))
                            octr.DateMinute = dateMinute;
                        octr.Minute = listeOCTRencodésdr["minute"].ToString();
                        octr.AG = listeOCTRencodésdr["ag"].ToString();
                        listeOCTR.Add(octr);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("la lecture des OCTR encodées a engendré l'erreur suivante.Message : " + ex.Message, ex);
    }
            finally
            {
                conn.Close();
            }
            if (listeOCTR.Count > 0)
                return listeOCTR;
            return null;
        }

Voici le message que je reçois

System.Exception
  HResult=0x80131500
  Message=la lecture des OCTR encodées a engendré l'erreur suivante.Message : ERREUR: 42P01: la relation « octrencodees » n'existe pas
  Source=TopocomArchives
Exception interne 1 :
NpgsqlException : ERREUR: 42P01: la relation « octrencodees » n'existe pas

Qu'est-ce que je fais mal ?
Que dois-je faire pour avoir accès aux vues ?
Merci de vos z'avis z'avisés.

Dernière modification par Jean-Marc68 (29/08/2019 16:32:27)

Hors ligne

#2 29/08/2019 20:53:52

rjuju
Administrateur

Re : select sur une vue via npgsql

Bonjour,

string listeOCTRencodéssql = @"SELECT * FROM OCTRencodees;";

Étant donné que vous avez choisi d'utiliser un nom de table avec une casse, il vous faut systématiquement utiliser des guillements doubles lorsque vous y faites référence.  Le message d'erreur vous l'indique d'ailleurs :

la relation « octrencodees » n'existe pas

Hors ligne

#3 29/08/2019 21:10:53

Jean-Marc68
Membre

Re : select sur une vue via npgsql

Arf. Évidemment.
Voilà ce qui arrive quand on a le C# avec sa normalisation de noms de variables sur un écran et PostgreSQL avec une autre normalisation sur l'autre écran.
Je vais renommer les vues avec une casse pour respecter la normalisation PostgreSQL.
Merci de m'avoir fait remarquer ce que j'avais collé devant le nez et que je ne voyais pas.

Hors ligne

Pied de page des forums