如何通过文本框在数据库中搜索记录并将其显示在列表视图中

时间:2014-01-30 15:31:17

标签: vb.net listview textbox

所以我有这个简单的系统添加更新和删除数据库中的记录..我想搜索数据库中的数据..我已经使用了一些我知道的代码,但它不起作用..还有其他用于搜索数据库中的数据并在列表视图中显示的代码// ?? (抱歉英语不好)enter code here

这是我用于搜索的查询

Dim SqlQuery As String = "SELECT * FROM sample WHERE FirstName like ' % " & TextBox4.Text & " % ' 

这是我用来在listview“

中显示它的代码
    ListView1.Items.Clear()
    For i = 0 To TABLE.Rows.Count - 1
       Dim li As new ListViewItem
            li=ListView1.Items.Add(TABLE.Rows(i)("ID").ToString())
            li.SubItems.Add(TABLE.Rows(i)("FirstName").ToString())
            li.SubItems.Add(TABLE.Rows(i)("MiddleName").ToString())
            li.SubItems.Add(TABLE.Rows(i)("LastName").ToString())
            li.SubItems.Add(TABLE.Rows(i)("Gender").ToString())
    Next

2 个答案:

答案 0 :(得分:2)

要做的第一件事是删除导致Sql Injections

的字符串连接
Dim SqlQuery As String = "SELECT * FROM sample WHERE FirstName like @fName"
Dim cmd = new SqlCommand(SqlQuery, connection)
cmd.Parameters.AddWithValue("@fName", "%" & TextBox4.text & "%"

然后注意LIKE子句的通配符如何连接到TextBox值而没有值前面的空格(这是查询中的原始问题)

如上所述,使用参数化查询将避免Sql注入。 Sql注入是一个主要问题,并没有尽头,因为使用这种天真的方法来构建字符串的程序是无数的。

但是其中的一部分,字符串concat也是另一个问题的诅咒。如果文本框包含单引号怎么办?结果将是语法错误,因为文本框中的单引号将被解释为LIKE值的结束引用,将文本框的其余部分保留为无效的sql语句。当然,您可以对每个字符串应用Replace("'", "''")并将该代码乘以10或20个字符串参数,然后查看出现的奇妙混乱。

Give me a parameterized SQL or give me death

答案 1 :(得分:0)

如果您对Sql Injections不感兴趣,可以使用此

导入System.Windows.Forms

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    Dim ds As New DataSet
    Dim sqladap As New SqlClient.SqlDataAdapter(" SELECT * FROM sample WHERE FirstName like '%" + TextBox4.text + "%'", <yourconnection>)
    sqladap.Fill(ds)

    For i As Integer = 0 To ds.Tables(0).Columns.Count - 1
        ListView1.Columns.Add(ds.Tables(0).Columns(i).ToString())
    Next
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1

        Dim listRow As New ListViewItem
        listRow.Text = ds.Tables(0).Rows(i)(0).ToString()
        For j As Integer = 1 To ds.Tables(0).Columns.Count - 1
            listRow.SubItems.Add(ds.Tables(0).Rows(i)(j).ToString())
        Next
        ListView1.Items.Add(listRow)
    Next
End Sub