IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Passage à Option Strict On


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Passage à Option Strict On
    Bonjour,

    Voulant mettre un peu de rigueur (et peut-être améliorer la rapidité d'exécution) dans mon appli, j'essaye de passer à Option Strict On alors que j'ai développé celle-ci avec l'option Strict Off jusqu'ici

    Voici un petit bout de code que je n'arrive pas à adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim dt As DataTable = MonDataSet.Ma_dt
     
    ...
    Me.MonTableAdapter.Update(dt)
    La dernière instruction ne passe pas :

    Erreur 11 La résolution de surcharge a échoué, car aucun 'Update' accessible ne peut être appelé avec ces arguments*:
    'Public Overridable Overloads Function Update(dataRows() As System.Data.DataRow) As Integer'*: Impossible de convertir une valeur de type 'System.Data.DataTable' en 'Tableau à 1 dimension(s) de System.Data.DataRow'.
    'Public Overridable Overloads Function Update(dataRow As System.Data.DataRow) As Integer'*: Impossible de convertir une valeur de type 'System.Data.DataTable' en 'System.Data.DataRow'.
    'Public Overridable Overloads Function Update(dataSet As MonDataSet) As Integer'*: Impossible de convertir une valeur de type 'System.Data.DataTable' en 'MonAppli.MonDataSet'.
    'Public Overridable Overloads Function Update(dataTable As MonDataSet.Ma_dtDataTable) As Integer'*: Option Strict On interdit les conversions implicites de 'System.Data.DataTable' en 'MonAppli.MonDataSet.Ma_dtDataTable'. C:\Users\stephmag\Documents\Visual Studio 2010\Projects\MonAppli\MonAppli\MonForm.vb 41 17 MonAppli
    Je découvre que Update est en fait une fonction, et non une Sub, qui retourne un integer.

    Que faut-il faire sachant que CInt(Me.MonTableAdapter.Update(dt)) ne marche pas ?

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Ce n'est pas le fait que ce soit une fonction le problème (il est toujours possible d'ignorer le retour d'une fonction si on le souhaite) ; mais plutôt le type de l'argument qui ne colle pas
    Dim dt As DataTable = MonDataSet.Ma_dt
    Public Overridable Overloads Function Update(dataTable As MonDataSet.Ma_dtDataTable) As Integer'
    Update attend un MonDataSet.Ma_dtDataTable pas un DataTable à voir si tu peux directement typer comme il faut lors de la déclaration de dt.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    une fonction peut etre appelée comme une sub, rien n'oblige à stocker la valeur de retour
    sinon cint n'a rien à voir dans la question, éventuellement dim r = appel_de_la_fonction()
    mais comme dit c'est facultatif d'assigner le retour

    par contre ici je ne vois pas pourquoi il t'embete, ton datatable est un datatable normal ou tu as fait un héritage ?
    tu as essayé avec update(ledataset) ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    OK, pigé, c'est juste que j'ignorais qu'il existe un type MonDataSet.Ma_dtDataTable. j'aurais pu m'en douter en lisant bien le message d'erreur.

    Merci pour votre aide.

    J'ai un autre exemple de la même veine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim dr as datarow
    ...
    dr("chrono") = if(montextbox.text ="", DBNull.value, 3)
    J'ai un peu simplifié la ligne de code mais l'idée est que le champ "chrono" stocke un integer qui peut être DBNull dans certains cas.
    Or Integer et DBNull ne font pas bon ménage : "impossible de déduire un type commun" me dit-on lorsque je tente un Option Strict On.
    Comment fait-on dans ce cas ?

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    et là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dr("chrono") = 3
    if montextbox.text = "" then dr("chrono") = DBNull.value

    sinon avec iif à la place de if ca fonctionne (je ne connaissais pas la syntaxe avec if tout court dans ce cas d'ailleurs)
    par contre autant que je peux comprendre qu'il râle (enfin limite quand même) je ne comprend pas pourquoi il ne râle pas dans les deux cas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Merci pour le tuyau. Je connaissais IIf mais j'avais opté pour If après avoir lu dans MSDN que Iif évalue systématiquement les 3 arguments alors que If n'évalue que les 2 premiers si la condition de l'argument 1 est vraie.
    Bizarrement, en effet, ça marche très bien avec Iif. Je n'aurais jamais pensé à chercher une solution de ce côté là.

    Du coup, j'ai enfin réussi à lever toutes les "erreurs" signalées lors du passage à Strict On (plus de 200 au total).

    Il me reste à tester l'appli et voir si je sens une différence en matière de performance.
    J'avoue que je reste assez dubitatif. bien que VB.NET soit théoriquement plus rapide avec l'option Strict On (ce qu'on comprend bien sur le principe du fait que les tests de cohérence sont effectués lors de la compilation, c'est au prix d'une débauche de conversions (ctype, Cint, Cbool, .toString, etc...).

    On va voir. Si je détecte une amélioration, j'en témoignerai dans ce topic.

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Bon, ben c'est pas flagrant, j'ai effectué une 10 lancements de mon appli en chronométrant la séquence de démarrage (en ms).
    - 2 séries pour la version 77 qui comporte l'option strict On
    - 1 série pour la version 76 qui n'avait pas l'option strict On

    La moyenne arithmétique plaide en faveur de la V76 mais vu l'écart-type, cela n'est pas significatif.

    Nom : Capture.JPG
Affichages : 633
Taille : 29,0 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Repeater et XML avec Option Strict "On"
    Par boivsam dans le forum ASP.NET
    Réponses: 0
    Dernier message: 15/10/2009, 19h34
  2. Option Strict On ET OpenMode.Binary
    Par Tropic dans le forum VB.NET
    Réponses: 8
    Dernier message: 25/08/2009, 08h05
  3. VB.Net / Option Strict On
    Par sandre dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/07/2009, 17h37
  4. Probleme : option strict on rejette toute liaison tardive
    Par Roken62 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/04/2009, 16h20
  5. Ecriture class (classe) Latex -- passage option -- style
    Par osfdeb dans le forum Mise en forme
    Réponses: 0
    Dernier message: 16/03/2009, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo