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 :

VB.NET SqlCommand.Parameters ? TRES ETRANGE!


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut VB.NET SqlCommand.Parameters ? TRES ETRANGE!
    Messieurs, Dames Bon! Jour!

    J'ai un souci, je sais c'est courant par ici...?

    Alors voila, si vous pouvez m'aider c'est cool.
    J'ai une requete SQL à executer sur un SQL Server 2008.
    J'utilise Visual Studio 2010 en VB.NET

    Dans le cas suivant SQL DataAdapter je concatene ma requete avec mes valeurs "string" et tout va bien. Formidable me direz vous.

    'PREMIER CAS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sql_adapter = my_sql.myDAdapter(Query_TTx_err_1s7 & "'" & Mag.Numero & "'" & _
                                  Query_TTx_err_2s7 & "'" & date_debut & "'" & _
                                  Query_TTx_err_3s7 & "'" & date_fin & "'" & _
                                  Query_TTx_err_4s7 & _
                                  Query_TTx_err_5s7 & ttx_min & _
                                  Query_TTx_err_6s7 & ttx_max & _
                                  Query_TTx_err_7s7)
     
    'Avec Espion voici à quoi la requête complète ressemble.
     
    "SELECT DATE_J, NB_TICKET, ENTREES, ((NB_TICKET*100)/entrees) as TTx
     FROM [TTx].[dbo].[v_detail_agreg]
     WHERE (NUMMAG = '0157')
       AND (DATE_J BETWEEN '1-7-2010' AND '1-8-2010')
       AND (ENTREES <> 0)
       AND (NB_TICKET <> 0)
       AND (((NB_TICKET * 100)/ENTREES) NOT BETWEEN 15 AND 45)
     ORDER BY DATE_J;"


    Mais voila j'ai voulu faire mieux et il parait que c'est l'ennemi du bien mais quand même le propreté n'a jamais tué personne... à ma connaissance en tout cas.
    J'ai donc voulu utiliser une requête paramétré... comme suit.

    'DEUXIEME CAS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Sql_adapter = my_sql.myDAdapter(query_ttx)
     
    'Avec espion voila le requête
     
    "SELECT DATE_J, NB_TICKET, ENTREES, ((NB_TICKET*100)/ENTREES) as TTx
     FROM [TTx].[dbo].[v_detail_agreg]
     WHERE (NUMMAG = @nummag)
       AND DATE_J BETWEEN @date_deb AND @date_fin
       AND ENTREES <> 0
       AND ((NB_TICKET * 100) / ENTREES) NOT BETWEEN @ttx_min AND @ttx_max
       AND NB_TICKET <> 0
    ORDER BY DATE_J;"
     
    'Puis je passe mes valeur d'argument
     
    With Sql_adapter.SelectCommand.Parameters
    	.Add(New SqlParameter("@nummag", SqlDbType.Char))
            .Add(New SqlParameter("@date_deb", SqlDbType.Date))
            .Add(New SqlParameter("@date_fin", SqlDbType.Date))
            .Add(New SqlParameter("@ttx_min", SqlDbType.Int))
            .Add(New SqlParameter("@ttx_max", SqlDbType.Int))
    End With
    With Sql_adapter.SelectCommand
    	.Parameters("@nummag").Value = Mag.Numero
            .Parameters("@date_deb").Value = date_debut 'Convert.ToDateTime(date_debut)
            .Parameters("@date_fin").Value = date_fin 'Convert.ToDateTime(date_fin)
            .Parameters("@ttx_min").Value = ttx_min 'CInt(ttx_min)
            .Parameters("@ttx_max").Value = ttx_max 'CInt(ttx_max)
    End With

    Enfin je "Fill" mon DataSet "my_Ds"
    Dans le premier cas Ho stupeur ca marche très bien!!!
    Dans le 2eme cas!!! Division par ZERO Error! (J'ai bien entendu vérifié en pas à pas si les valeurs des paramètres étaient identique et elles le sont!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql_adapter.Fill(my_Ds, "V_Detail_Agreg")
    Si quelqu'un a une idée? Une solution ou une incantation quelconque qu'il n’hésite pas à me dire comment ou pourquoi ou peut autre chose???
    PS:ça fait 3 jour que je tourne la requête dans tous les sens, les commandes et les paramètres dans différent type, différentes forme et rien n'y fait! La première "SALE" marche et la deuxième "('"("propre")"')" répond Division par ZERO!

    Bonne journée à tous et Merci
    Tibo

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Au cas où, "entrees" est-il NULL parfois ?

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Utilise le profiler SQL Serveur pour voir la vrai requête qui est envoyé et executer par SQL Serveur.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    Citation Envoyé par ostenhard Voir le message
    Bonjour,

    Au cas où, "entrees" est-il NULL parfois ?
    Salut! et Merci

    Non malheureusement entrees n'est jamais null, à 0 ou positif. cela dis j'ai quand même tenté d'ajouter la condition not null mais ça n'a rien changé et la première requête est identique et fonctionne?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    Citation Envoyé par WOLO Laurent Voir le message
    Utilise le profiler SQL Serveur pour voir la vrai requête qui est envoyé et executer par SQL Serveur.
    Merci! mais dis moi, comment puis je faire ca? j'y ai pensé mais sans savoir comment m'y prendre... je ne suis qu'un débutant en fait.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    SQL Profiler n'est pas dispo dans Management Outils...? ni null par ailleurs d'ailleurs.

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Regardes dans Performances Tools du menu démarrer-->programmes.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    Citation Envoyé par WOLO Laurent Voir le message
    Regardes dans Performances Tools du menu démarrer-->programmes.
    Alors je viens de réaliser, quelqu'un viens de me dire, que j'ai SQL EXPRESS et que Profiler n'est pas dispos sur cette version.

    J'ai donc téléchargé AnjLab Sql Express Profiler qui affiche, certes, des trucs mais rien de vraiment utile pour moi, en tous cas pas la requête reçu...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Par défaut
    Serait il possible que SQLCommand exécute une requête pour chaque condition du WHERE et que du coup une des condition me réponds divided by ZERO?

    Car j'ai oublié de préciser que quand j’enlève la division pas entrees dans la condition, et uniquement dans la condition, ça marche bien... mais mes résultats ne sont pas dans la fourchette que je désire.

    Évidemment mon hypothèse est saugrenue mais je vous assure que la situation est saugrenu.
    Qu'en pensez vous? qui sait comment sqlclient, visual studio, microsoft gère et exécute tout ça?

Discussions similaires

  1. SQLcommand (Parameters.AddWithValue )?
    Par bgcode dans le forum VB.NET
    Réponses: 7
    Dernier message: 12/06/2007, 10h06
  2. [2.0][C#] cast tres etrange d'un control
    Par igorzup dans le forum ASP.NET
    Réponses: 11
    Dernier message: 28/12/2006, 12h08
  3. [C#/ASP.Net] Pourquoi SqlCommand.Parameters.Add échoue ?
    Par focus_dotnet dans le forum Accès aux données
    Réponses: 2
    Dernier message: 25/08/2006, 17h05
  4. Probleme tres etrange avec une requete...
    Par Jim_Nastiq dans le forum Langage
    Réponses: 15
    Dernier message: 18/04/2006, 15h03
  5. est ce normal que le module NET::FTP soit TRES lent ?
    Par ramislebob dans le forum Modules
    Réponses: 4
    Dernier message: 14/03/2006, 09h13

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