Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Julien.
https://rjuju.github.io/
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
Pages : 1