Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Installation
Installation Forum d'entraide sur les problèmes liés à l'installation de PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/01/2011, 17h34   #1
jackrabbit
Invité de passage
 
Inscription : juillet 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 17
Points : 3
Points : 3
Par défaut Accès à PostgreSQL via ODBC et VB.NET

J'essaye d'accéder à une base de données PostGreSQL pour la première fois avec VB.NET 2008 et le driver ODBC psqlodbc de PostgreSQL.

Je ne veux pas créer un DSN, mais j’utilise plutôt le connectionstring
Code :
Driver={PostgreSQL};Server={MonIP};Port=5432;DATABASE={MaBD};Uid={MonLogin};Pwd={MonPwd}
Après avoir installé le package de psqlodbc, je suis incapable d'identifier la référence à ajouter à mon programme pour pouvoir accéder à ma base de données via le ODBC. Que dois-je faire?
jackrabbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 17h51   #2
sevyc64
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 5 295
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 40
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 5 295
Points : 11 965
Points : 11 965
Si tu veux acceder par ODBC, ta chaine de connection semble correcte.

Quant à la référence à utiliser, c'est, dans ce cas, l'assembly standard du framework à savoir System.Data.Odbc
__________________
--- Sevyc64 ---

Parce que le partage est notre force, la connaissance sera notre victoire
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 18h08   #3
jackrabbit
Invité de passage
 
Inscription : juillet 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 17
Points : 3
Points : 3
Il est déjà inclus. Voici le message d'erreur que j'obtiens sur le OPEN.

Je peux me connecter sans problème à d'autres base de données avec le même code, donc il doit me manquer quelque chose pour PostGreSQL.

J'imagine que je devrai aussi inclure un des DLL du ODBC de PostGreSQL lorsque je vais déployer mon application sur un autre PC?

Sur le site WEB de PostGreSQL il donne uniquement un example en utilisant un DSN mais je ne dois pas utiliser un DSN pour mes déployments. (http://wiki.postgresql.org/wiki/Usin...erver_via_ODBC).

Citation:
System.Data.Odbc.OdbcException
12:02:10.1 ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
12:02:10.2 at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
12:02:10.2 at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
12:02:10.2 at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
12:02:10.2 at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
12:02:10.2 at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
12:02:10.2 at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
12:02:10.2 at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
12:02:10.3 at System.Data.Odbc.OdbcConnection.Open()
12:02:10.3 at RoIpConsole.Odbc.OdbcConfig()
12:02:10.3 C:\Temp\RoIpConsole\Odbc.vb:line 25
jackrabbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 18h31   #4
sevyc64
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 5 295
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 40
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 5 295
Points : 11 965
Points : 11 965
Est-ce que ton driver odbc marche correctement ?

Peux-tu justement créer une DSN et l'utiliser par exemple avec Excel ?

Vérifie aussi que tu n'as pas un problème de parefeu qui bloquerait les ports de Postgre notamment le 5432
__________________
--- Sevyc64 ---

Parce que le partage est notre force, la connaissance sera notre victoire
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 19h59   #5
jackrabbit
Invité de passage
 
Inscription : juillet 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 17
Points : 3
Points : 3
Si j'utilise le ConnectionString de MySQL, mon code fonctionne, donc soit que mon ConnectionString est mauvais pour PostGreSQL, soit que le ODBC est introuvable.

Ce n'est pas un problème de Firewall, la base de données PostGreSQL a été créer sur mon ordi de développement avec port par défaut, aucun Firewall Windows sur ce PC.

1- J'ai installé la version 9.0.2.1 Win x86-32 de cette page (http://www.enterprisedb.com/products...oad.do#windows)

2- J'ai crée une base de données locale avec une table et des données que je peux consulter avec pgAdmin III

3- J'ai installé le package MSI du driver ODBC 9.0 de cette page (http://www.postgresql.org/ftp/odbc/versions/msi/)

4- Si je regarde dans Administrative Tools - Data Sources - Drivers, je vois PostgreSQL ANSI, PostgreSQL ODBC Driver(ANSI), PostgreSQL ODBC Driver(UNICODE). Sur les onglets User DSN, System DSN, File DSN je ne vois aucun lien vers PostgreSQL.

5- Dans VB.NET, si je vais dans References, j'ai activé le Namespace System.Data.Odbc, mais je suis incapable de localiser quelque référence que ce soit dans .NET, COM ou autres.

Avez-vous une idée?
jackrabbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 20h21   #6
sevyc64
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 5 295
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 40
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 5 295
Points : 11 965
Points : 11 965
Ok, tout cela semble correct, à priori.

Ma question était, pour le point 4, est-ce que tu as essayer de créer une "User DSN" (ou une "System DSN") comme indiqué dans le line que tu donne plus haut, et est-ce que tu as essayer d'utiliser cette DSN créée avec par exemple Excel pour acceder à ta base.
Cela juste pour vérifier que le driver ODBC fonctionne correctement.

Pour le paramètre Server, quelle adresse IP donne-tu ? As-tu essayer avec l'adresse 127.0.0.1 ?
__________________
--- Sevyc64 ---

Parce que le partage est notre force, la connaissance sera notre victoire
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 22h36   #7
jackrabbit
Invité de passage
 
Inscription : juillet 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 17
Points : 3
Points : 3
Tu as mis le doigt sur le bobo ... en partie.

J'utilisait le ConnectionString suivant et ça ne fonctionnait pas:
Driver={PostgreSQL};Server=192.168.1.17;...

Finalement je devait changer le Driver ET le Server pour que ça marche:
Driver={PostgreSQL ANSI};Server=127.0.0.1;...

Si j'essais les drivers "PostgreSQL ODBC(ANSI)" et "PostgreSQL ODBC Driver(UNICODE)", alors ne fonctionne pas, seul le driver "PostgreSQL ANSI" semble OK.

Maintenant que ça fonctionne, j'ai créé la même base de données sur un autre réseau externe (je dois donc sortir sur internet pour y accéder), avec les même données dans une version MySQL et PostgreSQL.

Si j'exécute la command "select * from histo order by Row_id Desc, CallFrom limit 2000" dans chaque base de données via ODBC, en modifiant le ConnectionString, j'obtiens les résultats suivants:

MySQL : 2.52 secondes
PostGreSQL: 7.201 secondes

Est-ce que ce sont les performances à laquelle je dois m'attendre sur PostGreSQL (3 x plus lent que MySQL)? Le gros du délai provient de l'exécution de la méthode ExecuteReader.
jackrabbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 22h53   #8
sevyc64
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 5 295
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 40
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 5 295
Points : 11 965
Points : 11 965
Je ne saurais te répondre sur les durées, je ne connais que très très peu autant l'un comme l'autre des SGBD.

Par contre, il est vrai que certains drivers ODBC, suivant comme ils sont codés sans doute, peuvent se révéler parfois lent.

Autre point à prendre en compte, tu passe par internet. Rien que ce fait là, peut te donner des temps très variables. Même une même requete sur le même SGBD, répétée plusieurs fois, pourra te donner des temps variables suivant la charge du réseau, et les routes empruntées.
Tes requêtes font peut-être 2 fois le tour du monde pour te parvenir.
__________________
--- Sevyc64 ---

Parce que le partage est notre force, la connaissance sera notre victoire
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h47.


 
 
 
 
Partenaires

Hébergement Web