gpt4 book ai didi

SQL/VB.NET Search-Function 寻找至少一个正确的输入

转载 作者:行者123 更新时间:2023-12-03 18:50:46 24 4
gpt4 key购买 nike

我正在用 Visual Basic 编写一个关于数据库的程序。现在我有一个在数据库中搜索正确输入的子/函数。我有五个文本框,用户可以在其中为每个数据字段输入内容。

If txtBox1.Text <> "" Or txtBox2.Text <> "" Or txtBox3.Text <> "" Or txtBox4.Text <> "" Or txtBox5.Text <> "" Then
Try
connection.Open()
command.CommandText = "SELECT * from lager WHERE (lager_waren_id LIKE '" & txtBox1.Text & "' OR lager_warenanzahl LIKE '" & txtBox2.Text & "' OR lager_warenname LIKE '%" & txtBox3.Text & "%' OR lager_warengewicht LIKE '" & txtBox4.Text & "%' OR lager_waren_verkaufspreis LIKE '" & txtBox5.Text & "%');"
reader = command.ExecuteReader()

FormKunde.Enabled = True
FormKunde.lstViewKundeStore.Items.Clear()
Do While reader.Read()
Dim lstViewItem As New ListViewItem(reader("lager_waren_id").ToString())
lstViewItem.SubItems.Add(reader("lager_warenanzahl").ToString())
lstViewItem.SubItems.Add(reader("lager_warenname").ToString())
lstViewItem.SubItems.Add(reader("lager_warengewicht").ToString())
lstViewItem.SubItems.Add(reader("lager_waren_verkaufspreis").ToString())
FormKunde.lstViewKundeStore.Items.Add(lstViewItem)
Loop
reader.Close()
FormKunde.Enabled = False
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
connection.Close()
Else
MessageBox.Show("Please fill in something in the text fields")
Exit Sub
End If

如果至少一个文本字段具有与其所属的数据字段匹配的某些输入,我正在询问数据库。但是当我把东西放进去时,不管多少,我的 ListView 中什么都没有发生。它只是将所有数据加载回 ListView 中。当我尝试执行“AND”而不是“OR”时,只有当我用一个数据集的正确数据填充所有文本字段时,它才有效。但我想要它找到所有数据集。
一个例子:
我有两个数据集,名称分别为“App”和“Apple”。当我只是在名称字段中填写“Ap”时(其他字段中没有),它会向我显示两者。我认为它应该与“OR”一起使用,但它什么也不做。

我真的很困惑如何解决这个问题,我希望任何人都有一个猜测。谢谢!

最佳答案

您的问题是,当相关文本框中没有输入时,您的查询也总是使用所有条件。这样你的 LIKE 就变成了 LIKE '%%'当然,这匹配每条记录。

仅当文本框不为空或不为空时,您才需要添加条件。
因此,您需要在检查文本框是否包含要搜索的任何值之后,分部分构建查询。

    connection.Open()
Dim sql = "SELECT * from lager WHERE "
if Not string.IsNullOrWhiteSpace(textBox1.Text) Then
sql = sql & "lager_waren_id LIKE @p1 OR "
command.Parameters.AddWithValue("@p1", textBox1.Text)
End If
if Not string.IsNullOrWhiteSpace(textBox2.Text) Then
sql = sql & "lager_warenanzahl LIKE @p2 OR "
command.Parameters.AddWithValue("@p2", textBox2.Text)
End If
if Not string.IsNullOrWhiteSpace(textBox3.Text) Then
sql = sql & "lager_warenname LIKE @p3 OR "
command.Parameters.AddWithValue("@p3", "%" & textBox3.Text & "%")
End If
if Not string.IsNullOrWhiteSpace(textBox4.Text) Then
sql = sql & "lager_warengewicht LIKE @p4 OR "
command.Parameters.AddWithValue("@p4", textBox4.Text & "%")
End If
if Not string.IsNullOrWhiteSpace(textBox5.Text) Then
sql = sql & "lager_waren_verkaufspreis LIKE @p5 OR "
command.Parameters.AddWithValue("@p5", textBox5.Text & "%")
End If
' Remove the last OR if any ....'
if sql.EndsWith(" OR ") then
sql = sql.Substring(0, sql.Length - 4)
End If
' Remove the WHERE if no textbox has been filled....'
if sql.EndsWith(" WHERE ") then
sql = sql.Substring(0, sql.Length - 7)
End If
command.CommandText = sql
reader = command.ExecuteReader()

另请注意,您应该始终使用参数化查询来避免 Sql Injection特别是当您直接从用户那里获得输入时。 (更不用说包含单引号的键入文本的问题)

关于SQL/VB.NET Search-Function 寻找至少一个正确的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com