Requête paramétrée avec ADO.NET
Bonjour,
J'essaye depuis quelques temps de faire une requête paramétrée en VB.NET, requête que voici :
Code:
1 2 3 4 5 6 7 8 9
| strRequete = "SELECT nom_mainmenu, " & _
"nom_section, " & _
"nom_sous_section " & _
"FROM mainmenu M " & _
"LEFT OUTER JOIN Sections S " & _
"ON M.id_mainmenu = S.id_mainmenu " & _
"LEFT OUTER JOIN sous_sections SS " & _
"ON S.id_section = SS.id_section " & _
"WHERE M.id_site_web = @id_siteweb" |
L'unique paramètre que j'utilise se situe dans la clause WHERE de ma requête, et pour le rendre effectif, il faut bien sur le déclarer, et c'est bien là qu'est le problème.
Après plusieurs heures à faire des recherche avec mon amis Google et le Cours/Tutoriaux de Developpez.net, je n'obtiens aucun résultat.
Voici une partie de mon code :
Code:
1 2 3 4 5 6 7
| Dim oConnection As New OleDb.OleDbConnection(My.Settings.ChaineCnx)
oConnection.Open()
Dim strRequete As String
'Position de l'assignation de valeur d'strRequete (la requête situé au dessus)
Dim oCmdSQL As OleDbCommand = New OleDbCommand(strRequete, oConnection)
oCmdSQL.Parameters.Add(New OleDbParameter("@id_siteweb", OleDbType.Integer, 12))
oCmdSQL.Parameters("@id_siteweb").Value = Tmp 'Tmp est déclaré plus haut |
Au niveau de la value je préfèrerais utiliser directement ma ComboBox via sa propriété DisplayMember, ou SelectedValue, mais ceci est un détail.
ComboBox que voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Private Sub ChargeCbBox()
'Paramètres de la requête
Dim oConnection As New OleDb.OleDbConnection(My.Settings.ChaineCnx)
Dim strRequete As String = "SELECT id_site_web, lib_site_web " & _
"FROM sites_web"
oConnection.Open()
Dim oCmdSQL As New OleDb.OleDbCommand(strRequete, oConnection)
Dim rsSite As OleDb.OleDbDataReader = oCmdSQL.ExecuteReader
Dim oDataTable As New DataTable
oDataTable.Load(rsSite)
'Remplissage dynamique de la combo box
With CB_CHOIXSITE
.ValueMember = "id_site_web"
.DisplayMember = "lib_site_web"
.DataSource = oDataTable
End With
'Fermeture des accés à la base de données
rsSite.Close()
oConnection.Close()
End Sub |
Enfin bref, lorsque je m'efforce d'utiliser cette requête, je retombe inlassablement sur l'erreur :
Citation:
La Variable scalaire @id_siteweb doit être déclaré.
Or, j'ai réussi à ne trouver que 3 codes équivalents à mes deux dernières lignes présentées si dessus, aboutissant tous à ce résultat, j'en déduis donc qu'il manque autre chose.
Le but est d'observer le résultat dans une DataGridView dans un premier temps, puis répartir les information dans un TreeView au final.
J'espère avoir été clair, si quelqu'un sait d'où vient le problèmes, merci de m'informer. Si il vous manque des information, il suffit de me demander.
PS: J'utilise Visual Studio 2008 et en base de donnée SQL server 2005
PS2: Petite question annexe sans importance, la déclaration d'objet sur 1 ligne est plus couteuse en terme de performance ou autre? Ou cela n'à aucune importance
Ex:
Code:
Dim oConnection As New OleDb.OleDbConnection(My.Settings.ChaineCnx)
Plutot que:
Code:
1 2
| Dim oConnection As OleDb.OleDbConnection
oConnection = New OleDb.OleDbConnection(My.Settings.ChaineCnx) |