所以我有这个简单的系统添加更新和删除数据库中的记录..我想搜索数据库中的数据..我已经使用了一些我知道的代码,但它不起作用..还有其他用于搜索数据库中的数据并在列表视图中显示的代码// ?? (抱歉英语不好)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
答案 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个字符串参数,然后查看出现的奇妙混乱。
答案 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