2010-04-19 23 views
0

Je me connecte à une base de données PostgreSQL à partir d'un service Web .Net (tous deux sur une machine Windows XP). À quelques reprises récemment, sur quelques ordinateurs différents, nous avons reçu des erreurs System.AccessViolationException.Quelle est la cause de System.AccessViolationException lorsque j'accède à la valeur d'un champ ADODB?

Une trace de pile que j'ai pu obtenir a montré qu'elle se produisait lorsque j'ai pris un enregistrement ADODB.et obtenu la valeur d'un champ. par exemple.

Dim rs as ADODB.Recordset = 'initialize recordset via a query to database 
MsgBox(rs("fieldName").Value) 

Cela n'échoue pas toujours; il échoue rarement. Nous avons couru memtest sur l'un des ordinateurs et n'avons trouvé aucun problème.

Quel pourrait être le problème? Si c'est le pilote, quelles sont mes options?

+0

C'est le fournisseur. Obtenez-en un meilleur ou demandez de l'aide auprès du fournisseur du fournisseur. http://www.devart.com/dotconnect/ –

+0

Hans-merci. Un fournisseur est-il la même chose qu'un conducteur? À un moment donné, nous nous attendions à commencer à utiliser npgsql, mais pour l'instant je serais intéressé par le simple fait de corriger ce bug. Est-ce que je devrais juste choisir d'un de ceux-ci? http://www.postgresql.org/download/products/2 – pc1oad1etter

Répondre

0

La première chose à faire est d'essayer de mettre à niveau le fournisseur ADODB (parfois appelé un pilote). Cela peut représenter un bug rare qui aurait pu être corrigé. Cependant, le fait qu'il échoue rarement est un peu un drapeau rouge pour moi et suggère une sorte de problème de concurrence quelque part. Est-ce une application multi-thread? Que font les autres threads à ce moment-là? Est-il possible que ce soit une condition de course? Une deuxième chose à vérifier serait si certaines valeurs peuvent systématiquement bloquer le programme. Peut-être qu'il y a des nulls incorporés dans byteas ou quelque chose?

Très probablement cependant, ceci est un problème avec le pilote. Si vous voyez un problème similaire, c'est toujours l'endroit pour commencer.