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

ASP.NET Discussion :

Requête paramétrée fonctionnant avec le Integer mais pas avec les String


Sujet :

ASP.NET

  1. #1
    Courgette17
    Invité(e)
    Par défaut Requête paramétrée fonctionnant avec le Integer mais pas avec les String
    Voila j'ai quelque chose de ce genre:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
            Dim marque As String
            Dim desc As String
     
            marque = txtmarque.Text
            desc = txtdesc.Value
     
            Dim oConnection As New OleDbConnection
     
            Dim sConnectionString As String
            sConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " & Server.MapPath("********.mdb")
            oConnection.ConnectionString = sConnectionString
     
            oConnection.Open()
            Dim cmd As OleDbCommand
     
    cmd = New OleDbCommand("UPDATE produit SET idfamille = @idfamille, idssfamille = @idssfamille, idcategorie = @idcategorie, nomproduit= @marque, descproduit= '" & desc & "' WHERE idproduit = " & id1 & "", New OleDbConnection(sConnectionString))
     
                'idfamille
                Dim param As DbParameter = cmd.CreateParameter()
                param.ParameterName = "@idfamille"
                param.DbType = DbType.Int32
                param.Value = idfamille
                cmd.Parameters.Add(param)
     
                'idssfamille
                Dim param2 As DbParameter = cmd.CreateParameter()
                param2.ParameterName = "@idssfamille"
                param2.DbType = DbType.Int32
                param2.Value = idssfamille
                cmd.Parameters.Add(param2)
     
                'idcategorie
                Dim param3 As DbParameter = cmd.CreateParameter()
                param3.ParameterName = "@idcategorie"
                param3.DbType = DbType.Int32
                param3.Value = idcategorie
                cmd.Parameters.Add(param3)
     
                'quantite
                Dim param4 As DbParameter = cmd.CreateParameter()
                param4.ParameterName = "@quantite"
                param4.DbType = DbType.Int32
                param4.Value = quantite
                cmd.Parameters.Add(param4)
     
                'marque
                Dim param5 As DbParameter = cmd.CreateParameter()
                param5.ParameterName = "@marque"
                param5.DbType = DbType.String
                param5.Value = marque.ToString()
                cmd.Parameters.Add(param5)
     
                'description
                Dim param6 As DbParameter = cmd.CreateParameter()
                param6.ParameterName = "@descproduit"
                param6.DbType = DbType.String
                param6.Value = desc
                cmd.Parameters.Add(param6)
     
                cmd.Connection.Open()
                cmd.ExecuteNonQuery()
                cmd.Connection.Close()
                'End If
            Catch ex As Exception
                Label2.Text = "ERREUR: " & ex.Message
            End Try
            ' Fermeture de la connexion
            oConnection.Close()
    Et voila ma requête paramétrée fonctionne pour toutes les variables en Integer (avec DbType.Int32) mais dès que j'essaie de faire passer la variable "marque" ou "desc"'(avec DbType.String) ça ne fonctionne pas en me disant:
    "Type de données incompatible dans l'expression du critère"

    Alors que dans la base de données Access: nomproduit et descproduit (les champs destinataires des variables marque et desc) sont en Texte.

    J'ai essayé avec .Stringfixedlength, avec AnsiString, avec AnsiStringFixedlength, en précisant moi même le .Size du paramètre, en convertissant la variable encore une fois en .ToString (comme indiqué plus haut) mais toutes ces méthodes ce sont révélées infructueuses.
    Je voudrais savoir qu'est-ce que je devrais faire de spécial pour passer un dbtype.string dans cette requête.

    Merci d'avance.

    NB: J'ai volontairement changé le chemin de la base de données, les étoiles ne sont donc pas la cause des erreurs.

  2. #2
    Membre régulier
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    salut,

    je ne sais pas si c'est qui te génére cette erreur, mais tu ajoutes trop de paramètres à ta requète.

    tu ajoutes ces paramètres :
    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
    'quantite
    Dim param4 As DbParameter = cmd.CreateParameter()
    param4.ParameterName = "@quantite"
    param4.DbType = DbType.Int32
    param4.Value = quantite
    cmd.Parameters.Add(param4)
     
    [...]
     
    'description
    Dim param6 As DbParameter = cmd.CreateParameter()
    param6.ParameterName = "@descproduit"
    param6.DbType = DbType.String
    param6.Value = desc
    cmd.Parameters.Add(param6)
    alors qu'ils ne sont pas utilisés dans la requète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cmd = New OleDbCommand("UPDATE produit SET idfamille = @idfamille, " & _
    "idssfamille = @idssfamille, idcategorie = @idcategorie," & _ 
    "nomproduit= @marque, descproduit= '" & desc & "' " & _ 
    "WHERE idproduit = " & id1 & "", New OleDbConnection(sConnectionString))

  3. #3
    Courgette17
    Invité(e)
    Par défaut
    Ah bon il y a une limite dans le nombre de paramètres que l'on peut mettre?
    On peut augmenter cette limite?

    Oui je sais j'ai enlevé "quantité" du copier coller de la requête, désolé mais d'habitude je l'utilise. Pareil pour "desc", je testais d'abord le champ nomproduit avant de mettre aussi @descproduit dans la requête.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par MadMarc52 Voir le message
    Ah bon il y a une limite dans le nombre de paramètres que l'on peut mettre?
    On peut augmenter cette limite?

    Oui je sais j'ai enlevé "quantité" du copier coller de la requête, désolé mais d'habitude je l'utilise. Pareil pour "desc", je testais d'abord le champ nomproduit avant de mettre aussi @descproduit dans la requête.
    Le nombre de paramètres que tu ajoutes dans la commande doit être exactement le meme que le nombre de paramètre de la requete

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Autre point important:
    Je sais pas comment ça marche avec Access mais avec Sybase par exemple, tu dois ajouter tes paramètres à ta commande dans exactement le même ordre qu'ils apparaissent dans la requête

  6. #6
    Courgette17
    Invité(e)
    Par défaut
    Cool, cela fonctionne comme il faut, merci à vous deux.

    Pour Access il faut aussi donc que les paramètres soient dans le bon ordre et que tous les paramètres soient utilisés.
    Vous résolvez mes problèmes vraiment très vite, c'est classe.

  7. #7
    Courgette17
    Invité(e)
    Par défaut
    Tiens j'ai une autre question qui est liée:
    Comment je fais une recherche avec une requete sql select paramétrée?

    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE nomproduit LIKE '%@mots%'
    ???

    avec @mots il me prend juste le mot complet dans la recherche. C'est à dire que si il y a quelque chose avant ou après il ne le prend pas.

    et avec '%@mots%' il ne me prend rien du tout.

    Faut il que je crée un nouveau topic pour cette petite question?

  8. #8
    Courgette17
    Invité(e)
    Par défaut
    J'ai trouvé! Non sans avoir bavé, il fallait faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          mots = Request.Params("search")
                cmd = New OleDbCommand("SELECT * FROM produit WHERE nomproduit LIKE @mots OR descproduit LIKE @mots ORDER BY nomproduit ASC", New OleDbConnection(sConnectionString))
     
                'mots recherchés
                Dim param As DbParameter = cmd.CreateParameter()
                param.ParameterName = "@mots"
                param.DbType = DbType.String
                param.Value = "%" & mots & "%"
                cmd.Parameters.Add(param)
    J'espère que cela pourra être utile à quelqu'un.

Discussions similaires

  1. Fonctionne en débug avec visual studio , mais pas avec cmd.exe
    Par olivier1209 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 10/04/2013, 15h02
  2. [ZF 1.10] Clause where qui fonctionne avec type int mais pas avec type String
    Par shadypierre dans le forum Zend_Db
    Réponses: 5
    Dernier message: 30/04/2010, 13h00
  3. Réponses: 5
    Dernier message: 26/08/2009, 15h40
  4. idFTP : fonctionnement OK chez moi, mais pas chez les autres
    Par Goofyjp dans le forum Composants VCL
    Réponses: 2
    Dernier message: 31/10/2008, 15h35
  5. Mon script fonctionne avec un bouton, mais pas avec l'image!
    Par julien.63 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/04/2006, 16h26

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