Ich habe ein Problem mit meinem 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()
Sobald ich die Zeichenfolge in das Textfeld eingegeben habe, um nach einem Artikel zu suchen, erhalte ich diese Fehlermeldung:
Die parametrisierte Abfrage '(@ Parameter1 nvarchar (4000)) SELECT * FROM leihen wo (Departme 'erwartet den Parameter' @ Parameter1 ', der nicht angegeben wurde.
Kann mir jemand helfen?
Wenn Sie dem Parameter einen NULL-Wert übergeben, wird dieser Fehler auch nach dem Hinzufügen des Parameters angezeigt
Das wird funktionieren
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
Dadurch werden die Nullwerte aus der Objektschicht in für die Datenbank akzeptable DBNull-Werte konvertiert.
Ihre Website ist in Gefahr, gehackt zu werden.
Informieren Sie sich über SQL Injection und wie Sie dies in .NET verhindern können
Ihr Anfrageproblem ist derzeit das geringste Anliegen.
Aber.....
@ Misnomers Lösung ist nahe, aber nicht ganz da:
Ändern Sie Ihre Abfrage folgendermaßen:
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%@DepartmentText%')"
und fügen Sie Parameter auf diese Weise hinzu (oder auf die Art und Weise, wie @Misnomer dies tut):
cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text)
Der wichtige Unterschied ist, dass Sie Ihren CommandText ändern müssen.
Aufbau und Vereinfachung von Ravidevs Antwort :
Die VB.NET-Abkürzung lautet
cmd.Parameters.AddWithValue("@Department", IF(TextBox2.Text, DBNull.Value))
Die Abkürzung für C # ist
cmd.Parameters.AddWithValue("@Department", TextBox2.Text ?? DBNull.Value)
Versuchen Sie, Parameter hinzuzufügen so -
cmd.Parameters.Add("@Department", SqlDbType.VarChar)
cmd.Parameters("@Department").Value = TextBox2.Text
und ändern Sie Ihren Befehlstext in @Abe Miessler. Er hat Recht. Ich dachte, Sie werden es herausfinden.
Wenn Sie von einem DataGridView-Steuerelement in Ihre Datenbank schreiben, müssen Sie sicherstellen, dass keine leere Zeile vorhanden ist. Setzen Sie "Erlaube dem Benutzer das Hinzufügen von Zeilen" auf "false". Die letzte leere Zeile wird abgeschnitten.