|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 17 ![]() |
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} |
|
|
00
|
|
|
#2 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 5 295 ![]() |
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 |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 17 ![]() |
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:
|
|
|
|
00
|
|
|
#4 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 5 295 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 17 ![]() |
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? |
|
|
00
|
|
|
#6 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 5 295 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : juillet 2004 Messages : 17 ![]() |
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. |
|
|
00
|
|
|
#8 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 5 295 ![]() |
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 |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com