J'ai un problème avec mon code:
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
list.Items.Clear()
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%" & TextBox2.Text & "%')"
cmd.Connection = con
cmd.CommandType = CommandType.Text
con.Open()
rd = cmd.ExecuteReader()
If rd.HasRows = True Then
While rd.Read()
Dim listview As New ListViewItem
listview.Text = rd("ID").ToString
listview.SubItems.Add(rd("Department").ToString)
listview.SubItems.Add(rd("Purpose").ToString)
listview.SubItems.Add(rd("Items_Details").ToString)
listview.SubItems.Add(rd("Requested_by").ToString)
listview.SubItems.Add(rd("Approved_by").ToString)
listview.SubItems.Add(rd("Date").ToString)
listview.SubItems.Add(rd("Status").ToString)
listview.SubItems.Add(rd("Date_Returned").ToString)
list.Items.Add(listview)
End While
End If
con.Close()
Une fois que j'ai saisi la chaîne dans la zone de texte pour rechercher un élément, j'obtiens cette erreur:
La requête paramétrée '(@ Parameter1 nvarchar (4000)) SELECT * FROM emprunter où (Departme 'attend le paramètre' @ Parameter1 ', qui était non fourni.
Quelqu'un peut-il m'aider?
Si vous transmettez une valeur NULL au paramètre, vous obtiendrez cette erreur même après avoir ajouté le paramètreSo essayez de vérifier la valeur. Si elle est nulle, utilisez DBNull.Value.
Ça va marcher
cmd.Parameters.Add("@Department", SqlDbType.VarChar)
If (TextBox2.Text = Nothing) Then
cmd.Parameters("@Department").Value = DBNull.Value
Else
cmd.Parameters("@Department").Value = TextBox2.Text
End If
Cela convertira les valeurs nulles de la couche objet en valeurs DBNull acceptables pour la base de données.
Votre site Web court le risque d'être piraté.
Lire sur Injection SQL et comment l’empêcher dans .NET
Votre problème de requête est le moindre de vos problèmes pour le moment.
Mais.....
La solution de @ Misnomer est proche mais pas tout à fait là:
Changez votre requête en ceci:
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%@DepartmentText%')"
et ajoutez des paramètres de cette manière (ou à la manière dont @Misnomer le fait):
cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text)
La différence importante est que vous devez modifier votre CommandText.
Construire et simplifier les réponses de ravidev répondre :
Le raccourci VB.NET est
cmd.Parameters.AddWithValue("@Department", IF(TextBox2.Text, DBNull.Value))
Le raccourci C # est
cmd.Parameters.AddWithValue("@Department", TextBox2.Text ?? DBNull.Value)
Essayez d'ajouter paramètres comme ceci -
cmd.Parameters.Add("@Department", SqlDbType.VarChar)
cmd.Parameters("@Department").Value = TextBox2.Text
et changez le texte de votre commande en ce que @Abe Miessler a raison, je pensais juste que vous allez le comprendre.
Si vous écrivez d'un contrôle DataGridView dans votre base de données, assurez-vous qu'il n'y a pas de ligne vide. Définissez 'Autoriser l'utilisateur à ajouter des lignes' sur false; il tronque la dernière ligne vide inutile.