Ca me gonfle "l'exception xxx n'a pas été gérée" :o) !!!

Messages postés
64
Date d'inscription
vendredi 14 décembre 2001
Statut
Membre
Dernière intervention
19 juin 2010
- - Dernière réponse : cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- 20 juin 2010 à 15:32
Salut à tous,

ça me gonfle ! Je suis passé depuis quelques temps de vb6 à vb net et je me débrouille pas trop mal... En revanche j'en ai vraiment marre de devoir tester tous les trucs possibles et inimaginables sur mes variables avant de m'en servir (est-ce que c'est nul, est-ce que c'est chaine vide, est-ce que c'est pas un long infini...)
Et le compilateur me saoule et fait planter mon prog à chaque fois parce qu'il m'avertit.

Ex :
- j'ai écrit une fonction find(tbl as system.data.datatable, stx as string)
- je l'appelle de la façon suivante : find(tblvaleurs,"code=" & lnx.tostring)
- lnx étant un long, il m'envoie une erreur "l'exception invalidcastexception n'a pas été gérée".

Est-ce que je lui demande si sa grand-mère fait du vélo moi ? je suis sur que mon lnx sera toujours ok à ce moment du programme. Alors est-il possible de désactiver ces p... de controles de contenu des variables ou est-ce qu'on doit absolument tout tester et faire du code inutile ?

Actuellement c'est ce que je fais et je passe plus de temps à écrire le code qui controle mes variables que le programme en lui-même :o)

Merci par avance les topains...



Attention à Astérix, mon Pitt Bull
Afficher la suite 

6 réponses

Messages postés
14617
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2020
138
0
Merci
Bonjour,

Mets TOUJOURS Option Explicit et Strict à On

Il te dit que le cast n'est pas bon, que ton tblvaleurs n'est pas de type system.data.datatable.

à toi de typer tes variable et les gérer correctement.

Commenter la réponse de NHenry
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
0
Merci
"l'exception invalidcastexception n'a pas été gérée"

Certes, mais où ??????

Tu as déroulé ton code en pas à pas étendu, pour voir sur quelle instruction ça plante vraiment, vérifié tes variables, elles sont toutes correctement déclarées ?

Option Explicit ON, Option Strict ON obligatoire, à définir directement dans les options de Visual Studio comme ça c'est valable l'ensemble du code et de tous les projets créés.

Et on garde en permanence afficher la fenêtre de la liste des erreurs. On n'envisage même pas d'exécuter le code tant que cette liste n'est pas vide.
Une erreur dans cette liste et le code ne compile pas, un avertissement et c'est un bug potentiel avec risque de plantage du logiciel. On est averti donc on corrige.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
Messages postés
64
Date d'inscription
vendredi 14 décembre 2001
Statut
Membre
Dernière intervention
19 juin 2010
0
Merci
Re,

Cette erreur se produit pile poil dans l'exemple que je vous ai donné. à ce moment là, lnx vaut 11. En fait la machine m'explique qu'elle ne veut pas continuer parce que je fais un transtypage de lnx en string (car la fonction "find" que j'ai écrite attend un type string), et m'indique que ça pourrait planter si mon lnx était de type infini (à un moment faut s'arreter de picoler). Mais si je commence à m'amuser à créer une variable string qui ne va servir qu'à récupérer mon lnx.tostring, j'ai pas fini...

j'ai un peu le meme genre d'erreur quand j'affecte quelque chose à une variable de type string et que la machine me dit que j'ai pas géré le cas ou ma chaine est nulle ; le compilateur me sert bien d'habitude, mais là il me gonfle vraiment

Attention à Astérix, mon Pitt Bull
Commenter la réponse de superchinois
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
0
Merci
As-tu essayer de mettre un point d'arrêt à l'intérieur de la fonction Find pour s'il y rentrait dedans ????

Pour moi le problème ne peut pas venir de ta variable lnx.
Si elle est de type Long, elle est toujours défini à moins que tu lui assigne explicitement la valeur Nothing à moment donné. Elle ne peut pas être infini, un long ne prend jamais la valeur infini, un long a obligatoirement une valeur comprise entre -9223372036854775808 et 9223372036854775807
Le seul cas qui peut poser problème c'est si lnx = Nothing mais tu dis qu'il est égal à 11

Pour moi, le problème vient soit de Tblvaleurs qu'il n'arrive pas à convertir en System.Data.Datatable, soit se produit sur une autre instruction à l'intérieur de la fonction Find ou d'une autre fonction appelée à l'intérieur de celle-ci.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
1 novembre 2010
5
0
Merci
Bonjour,
Integer n'est il pas suffisant ?
Long c'est du vB6 et posera de plus en plus de problèmes selon les applications et OS.
Voir http://msdn.microsoft.com/fr-fr/library/y595sc15%28VS.80%29.aspx
Commenter la réponse de cs_christoni
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
0
Merci
Long c'est du vB6 et posera de plus en plus de problèmes

FAUX

Long n'est pas du tout du VB6, c'est au contraire le type de base de tous les systèmes, les autres types sont tous alignés sur le Long

Sur un système 32 bits, le type Long fait 32 bits, sur un système 64 bits le type Long fait 64 bits
Le framework .Net étant bâti sur une structure 64 bits (même sur les systèmes 32 bits) le type Long fait 64 bits.

Le type Long était défini à l'origine, par l'entier le plus grand que peut contenir un registre du processeur.

Mais il est probable qu'un Integer soit suffisant ici.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy