Bonjour,
Je développe depuis peu avec Visual Web Developer 2005 Express et sous Windows XP.
Mon application n'a aucun soucis de fonctionnement avec une base Access mais alors vraiment de gros problème lorsque je tente d'accéder à une base Informix.
Dans le fichier Web.Config, j'ai remplacé :
<appSettings> <add key="ConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\serveur\rep\Database.mdb;User ID=;Password=;"/> </appSettings>
par :
<appSettings> <add key="ConnectionString" value="Provider=Ifxoledbc; Dsn=DSN_existant; informixserver=ids_boite; User ID=informix_user; Data Source=base_boite; host=boite; Password=pass_uid;"/> </appSettings>
Sur ma machine de dev : j'arrive à me connecter et très rapidement j'obtiens l'exeption :
{System.Data.OleDb.OleDbException: Aucune message d'erreur disponible, code de résultat : -2147417851(0x80010105). à System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) à System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) à System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) à System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) à System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) à System.Data.OleDb.OleDbConnection.Open() à SGBDFactory.OpenConnection() dans \tout le chemin\App_Code\Classes\Factories\SGBDFactory.cs:ligne 33 à SGBDFactory.Select(String sql) dans \tout le chemin\App_Code\Classes\Factories\SGBDFactory.cs:ligne 159}
Je cherche sans trouver :cry:
En transférant les fichiers sur une machine équipée de Windows 2000, cela ne fonctionne pas même une seule fois.
Si vous avez des pistes de recherche, n'hésitez pas à me les communiquer.
Merci de m'avoir lu!!!
Michel
Tu es sûr d'être connecté ? Je me permets la question car
l'exception semble bien provenir du constructeur de la connexion (..ctor) ce qui me donne à penser que tu ne te connectes pas en fait. Peut être une chaîne de connection erronée ?
Mais cela ne signifie pas forcément que le problème soit le même. On peut imaginer que sur l'autre machine le founisseur de données soit absent ou bien qu'un pare-feu fasse du zèle
En espérant t'avoir donné une piste
Merci Fred,
Oui, je suis sûr d'être connecté, en mode de déboguage (que je commence à maîtriser!) tout mon objet reviens rempli avec les données voulues provenant d'une table d'identification.
Etape 1 :
Sur l'application elle-même, je m'identifie, me déconnecte, m'identifie, me déconnecte, m'identifie et... problème plus rien n'a faire pour que cela fonctionne à nouveau :cry:
Je ferme Visual Web Developer Express, l'ouvre à nouveau et goto Etape 1;
Est-ce une piste possible?
Et pourquoi avec une table identique sous Access il n'y aucun problème et qu'avec Informix... :(
Puis j'ai fait des scripts shell en masse, du C sous Unix, du C++ sous Windows, de l'ASP et me disais que cela serait une bonne occasion d'accepter une mission en C#/Visual Web Developer... pour l'instant c'est à me dégouter de cet outil. :cry:
Autre chose, j'ai une fonction :
En déboguage, et sur la ligne du cnx.Open() et même lorsque je j'arrive à me connecter, il y a la variable locale ServerVersion qui lève une exception qui semble passer inaperçue :
Avec :
Ai mal fait quelque chose:?:
Michel
Ben non, il me semble que tu dis le contraire 3 lignes plus bas.
Donc si je comprends bien, tu te connectes, déconnectes, reconnectes de multiples fois, jusqu'au moment où tu ne parviens plus à te connecter.
Donc quand tu as le problème, tu n'es pas connecté, comme le laisse entendre l'exception que tu donnes dans ton premier post.
La piste c'est que Access n'est pas Informix...
Les SGDBR et leurs pilotes (ou founisseurs de données si tu préfères) ne sont pas les mêmes, donc ne se comportent pas pareil. Bon ils servent tous deux des données c'est entendu ;) mais entre le moment où tu te connectes et celui où tu récupères tes données il s'en passe des choses.
AMHA ton problème présente le parfait symptôme d'une fuite de connexions dans un pool. Avec un langage comme C# (ou Java, puisque ce sont les mêmes ;) ) ça se produit quand une exception est mal gerée, voire muselée. Exemple en pseudo code:
Dans cet exemple ta connexion n'est pas fermée. Si tu es avec Access qui ne connaît pas les pools de connexions, la connexion est bien fermée à la sortie du bloc try si l'exception se produit MAIS si tu travailles avec un pool de connexion sous Informix (ce que je ne sais pas, mais on dirait que oui) alors la connexion peut ne pas être pas fermée si l'objet Connexion est conçu ainsi. Pour y remédier tu dois reprendre ton code pour toujours fermer explicitement les connexions comme ceci:
Pour le second problème je ne sais pas à priori, sauf qu'il me semble que ça pourrait être un effet de bord du premier. Essaie de régler d'abord le premier.
Voilà j'espère t'avoir aidé. Tiens nous au courant :)
Hello,
J'ai installé une version plus récente de IBM Informix-Connect (version 2.90), résultat : même soucis mais le message d'erreur change :
Si j'oublis mon code un instant et utilise l'explorateur de base de données afin d'ajouter une nouvelle connexion OLE DB et clique sur "Tester la connexion", j'obtiens :
"Le test de la connexion a réussi." :D
Je ferme la messageBox et clique à nouveau sur "Tester la connexion", j'obtiens :
"Echec de IErrorInfo.GetDescription avec E_NOINTERFACES(0x80004002)." :(
Suis avancé...
Si tu regardes bien, c'est la même erreur, Quoique que formulée un peu différement. :(
Enfin il me semble.
Je crois que tu peux. Comme tu présentes la chose maintenant, on dirait bienun problème avec le(s) pilote(s)
Ca semble même certain si j'en crois ce que je vois là:
[url]
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=332805&SiteID=1
[/url]
En espérant que ça t'aide.
Hello Frederic,
J'ai la vague impression que c'est le pilote OLE DB d'IBM qui ne fonctionne pas correctement.
Du coup, j'ai remplacé mes objets oledb par odbc avec le même pilote et cela fonctionne au quart de tour! :D
Par contre... (et oui) je sèche sur un nouveau problème.
On m'a passé une machine toute neuve avec Windows 2000 server et y ai installé Framework 2.0, pilote ODBC, etc. lorsque je test la connexion odbc : "Test connection was successful"
Je transfert alors tout le contenu de mon "WebSite" vers cette machine.
Celle-ci affiche correctement la page d'accès (login/mot de passe) et ne va pas plus loin. J'imagine que l'application doit passer sur une exception lorsque je cherche à m'identifier et ne me le dis pas. :?
Je n'arrive pas à remonter l'information côté client. Ai tenté de jouer avec le
<%@ Page Language="C#" trace="true"...
mais rien de ce qui provient du serveur ne semble m'intéresser :(Comment faites-vous ?
Sinon, il m'a l'air limité parfois le Visual Web Developer Express, j'ai l'impression qu'il y a des fonctions intéressantes sous Visual Studio mais qui ne se trouvent pas toujours dans mes objets.
Enfin et très sincèrement : merci pour votre aide.
Michel
Bonsoir,
Plus qu'une vague impression, c'est sûr :( comme dit dans le post précédent.
Ca parait quand même curieux. L'exception a sans doute été muselée quelque part par mégarde.
Je ne sais pas, je n'utilise pas l'Express. Mais Express ou pas, je vois mal pourquoi une exception d'echec à la connexion ne remonterait pas.
C'est avec plaisir.
Hello,
J'ai une "abstract class" où je centralise toutes les différents accès à la base de données.
Entre autres ce petit bout de
Lorsque je passe dans le catch, cela n'empêche pas de retourner null.
D'ailleurs dans ce cas, je ne sais pas si c'est parcequ'il y a exception ou si la requête ne retourne rien.
Et lorsque je teste sur ma nouvelle machine : je suis persuader de ce que je saisi alors que reste-t-il? :wink:
Michel
Hello,
Enfin réussi à remonter le problème au client :
"The .NET Framework Odbc Data Provider requires Microsoft Data Access Components(MDAC) version 2.6 or later. Version 2.53.6200.1 was found currently installed." :D
A bientôt sans doute :wink:
Michel