VB.NET Requete sql avec parametres
Résolu
Freedomsoul
Messages postés
509
Date d'inscription
Statut
Membre
Dernière intervention
-
Freedomsoul Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
Freedomsoul Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
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 :
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
A voir également:
- VB.NET Requete sql avec parametres
- Parametres de mon ordinateur - Guide
- Paramètres dns - Guide
- Paramètres de confidentialité - Guide
- Leboncoin paramètres - Guide
- Paramètres iphone - Guide
2 réponses
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 !?
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
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 !
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 !