Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Inscrit en
    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?

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro Yves
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    6 944
    Détails du profil
    Informations personnelles :
    Nom : Homme Yves
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 944
    Points : 17 812
    Points
    17 812

    Par défaut

    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

  3. #3
    Invité de passage
    Inscrit en
    juillet 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juillet 2004
    Messages : 17
    Points : 3
    Points
    3

    Par défaut

    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).

    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

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro Yves
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    6 944
    Détails du profil
    Informations personnelles :
    Nom : Homme Yves
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 944
    Points : 17 812
    Points
    17 812

    Par défaut

    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

  5. #5
    Invité de passage
    Inscrit en
    juillet 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juillet 2004
    Messages : 17
    Points : 3
    Points
    3

    Par défaut

    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?

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro Yves
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    6 944
    Détails du profil
    Informations personnelles :
    Nom : Homme Yves
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 944
    Points : 17 812
    Points
    17 812

    Par défaut

    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

  7. #7
    Invité de passage
    Inscrit en
    juillet 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juillet 2004
    Messages : 17
    Points : 3
    Points
    3

    Par défaut

    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.

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro Yves
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    6 944
    Détails du profil
    Informations personnelles :
    Nom : Homme Yves
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 944
    Points : 17 812
    Points
    17 812

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •