IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Lecture de vues via npgsql


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut Lecture de vues via npgsql
    Salut,

    après des recherches infructueuses sur le Forum, je me décide à écrire un nouveau post pour tenter de résoudre mon pbl.


    Je code en C# et je me lie à postgresql (v.9.4.4) via npgsql.


    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 relation (ici la vue) n'existe pas (erreur 42P01). Pourtant elle existe bien.


    Voici une vue dans postgresql
    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
    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
    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
    39
    40
    41
    42
    43
    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.
    Il n'y a pas de problèmes. Il n'y a que des solutions.
    Malheureusement, elles sont parfois un peu dur à trouver ...


    Aucune touche n'a été maltraitée pour réaliser ce texte.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 006
    Points : 23 668
    Points
    23 668
    Par défaut
    Bonjour,

    Vous avez créé votre vue en mettant son nom entre guillemets, ce qui rend PostgreSQL sensible à la casse pour le nom de cette vue...
    Votre vue s'appelle OCTRencodees, mais votre requête est construite sans mettre le nom de la vue entre guillemets, ce qui fait que cette requête est insensible à la casse et que les majuscules sont transformées en minuscules.
    Donc, vous requêtez une vue qui se nomme octrencodees, qui n'existe effectivement pas (puisque tout est en minuscules).

    Deux solutions :
    1. Vous enlevez les guillemets du nom de la vue à sa création ;
    2. Vous ajoutez des guillemets autour du nom de la vue dans votre code pour qu'elles soient passées dans la requête et que la casse corresponde à celle du nom de la vue en base.


    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/06/2015, 17h06
  2. lecture de fichier via variable
    Par Pierrick584 dans le forum Langage
    Réponses: 2
    Dernier message: 07/08/2007, 00h50
  3. [vb6] Lecture en boucle via port COM
    Par Original Prankster dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/10/2006, 22h34
  4. [Jdbc] Lecture fichier DBF via JDBC
    Par djidji dans le forum JDBC
    Réponses: 4
    Dernier message: 06/09/2005, 15h14
  5. [FireBird] Accéder à une vue via Excel
    Par Vonotar dans le forum Débuter
    Réponses: 1
    Dernier message: 07/12/2004, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo