VB.NET Requete sql avec parametres

Résolu/Fermé
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 - 13 févr. 2013 à 11:14
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 - 14 févr. 2013 à 10:53
Bonjour !

j'ai un petit souci au niveau de l'ajout des parametres dans une requete SQL
Il est possible que j'ajoute des parametres supperflu afin de simplifier la chose mais lorsque la requete s'execute je remarques que les nom des parametres ajoutés ne sont pas lié aux nom indiqué dans la requete mais aux identifiant de la collection des parametres !


Je m'explique

Ma requete :
UPDATE TB SET A = @A, B = @B, C = @C WHERE D = @D

Si j'ajoute les parametres
@A, @B, @C, @D ça fonctionne, (normal)
Par contre, en ajoutant en premier parametre @X ce qui donne
@X, @A, @B, @C, @D

J'ai un décalage au niveau des valeurs dans ma requete, ce qui est illogique puisque les noms servent de repère, enfin c'est ce que je pensais...

Quelqu'un pourrait-il m'expliquer le focntionnement ?
Voici le code :

Sub TestParametre(ByRef Test As OleDbCommand, ByVal liste As Collection)
        If liste Is Nothing Then
            Exit Sub
        End If

        Test.Parameters.Clear()
        For Each item As Control In liste
            If TypeOf (item) Is ComboBox Then
ComboBox).SelectedValue
                Test.Parameters.AddWithValue("@" & item.Tag, DirectCast(item, ComboBox).SelectedValue)
            ElseIf TypeOf (item) Is CheckBox Then
                Test.Parameters.AddWithValue("@" & item.Tag, DirectCast(item, CheckBox).Checked)
            Else                'Test.Parameters.AddWithValue("@" & item.Tag, item.Text)
            End If

        Next
end sub

2 réponses

Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
Modifié par Freedomsoul le 14/02/2013 à 08:22
Pour smiplifier la chose :

Si j'inverse l'ordre d'ajout des parametres, on remarque que lors de l'update, les parametres changent aussi !

Et donc, à quoi servent les NOM !?


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
        Dim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & BDD_PATH & BDD_NAME & "; Persist Security Info=False" 
        Dim Con As New OleDb.OleDbConnection(conn) 
        Dim adapter As New OleDb.OleDbCommand("UPDATE T_ELEMENT SET [ELE_NOM] = [Test2], [ELE_DESCRIPTION] = [Test1]", Con) 

        adapter.Parameters.AddWithValue("Test1", "Val1") 
        adapter.Parameters.AddWithValue("Test2", "Val2") 
        adapter.Parameters.AddWithValue("Test3", "Val3") 

        Con.Open() 
        adapter.ExecuteNonQuery() 
        Con.Close() 

    End Sub 
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
14 févr. 2013 à 10:53
Réponse : (Pour ceux qui aurait faire la même chose)

Le system de nom ne fonctionne apparement pas :
voir ici : https://social.msdn.microsoft.com/Forums/fr-FR/83a5f0a9-66d9-445d-815a-18f893e4f1d5/comment-faire-une-requte-paramtre-dans-la-base-de-donnes-avec-vbnet?forum=vbasicfr

Pour solutionner mon problème j'ai simplement utiliser une fonction de remplacement :

function replacerchaine(chaine, collection)

qui parcour les item de la collection et remplace les éléments dans le chaine / requete sql, les parametres de la collection sont sous la forme nom -> valeur
et je replace le nom du parametre dans la requete par sa valeur correspondante.

ex :

[@param1] -> 'Valeur'

(attention cependant au type de la valeur !)

Bonne continuation !
0