Sql 如何修复?这表明一次性物品从未被处理过
da.fill(dt)--查询表达式“Staff ID='%1%”中的systax错误(缺少运算符)Sql 如何修复?这表明一次性物品从未被处理过,sql,vb.net,Sql,Vb.net,da.fill(dt)--查询表达式“Staff ID='%1%”中的systax错误(缺少运算符) 为了防止SQL注入,应该改用SQL参数 将函数更新为以下函数: conn.ConnectionString = dbProvider & dbSource conn.Open() Dim dt As New DataTable Dim ds As New DataSet ds.Tables.Add(dt) Dim da As New OleDbDataAdapte
为了防止SQL注入,应该改用SQL参数 将函数更新为以下函数:
conn.ConnectionString = dbProvider & dbSource
conn.Open()
Dim dt As New DataTable
Dim ds As New DataSet
ds.Tables.Add(dt)
Dim da As New OleDbDataAdapter
da = New OleDbDataAdapter("Select * from Staff where Staff ID = '%" & txtSearch.Text & "%';", conn)
da.Fill(dt)
DataGridView1.DataSource = dt.DefaultView
conn.Close()
End Sub
您的问题标题表明您询问的是一个“Object never disposed”错误。如果是,请尝试如下重写代码:
Public Function selectSQLFunction()
Dim conn as New SqlClient.SqlConnection
conn.ConnectionString = dbProvider & dbSource
conn.Open()
Dim da As New OleDbDataAdapter
Dim selectSQL As String = "SELECT * FROM Staff WHERE Staff ID = ?"
Dim selectCMD AS OleDbCommand = New OleDbCommand(selectSQL, conn)
da.SelectCommand = selectCMD
' Add parameters and set values. '
selectCMD.Parameters.Add( _
"@ID", OleDbType.VarChar, 20).Value = txtSearch.Text
Dim staffDS As DataSet = New DataSet
da.Fill(staffDS, "Staff")
dataGridView1.DataSource = ds.dataTable("Staff").DefaultView
conn.Close()
End Sub
请不要把你的主题作为整个问题。我不知道你在问什么。你要求的是通过不清除
txtSearch.Text
inputusing=
和a%(即通配符)进行攻击在SQL中没有任何意义。如果你想让通配符生效,那么就像使用一样使用。这也容易受到攻击-你需要使用。而且很难看出这个所谓的语法错误与处理对象有什么关系。”员工ID“需要放在括号中,因为它是一个包含空格的字段。您不需要数据集。DataAdapters可以为您打开和关闭连接,因此您不需要显式地这样做。此代码受Sql注入的约束。请更改答案以反映参数的使用。
Dim dt As New DataTable
Dim ds As New DataSet
ds.Tables.Add(dt)
using da As New OleDbDataAdapter("Select * from Staff where Staff ID LIKE '%" & txtSearch.Text & "%';", new oleDbConnection(dbProvider & dbSource))
'NOTE: Change above Select query to use parameters as per other answer'
da.Fill(dt) 'No need to open or close connection with data adapter'
end using 'This disposes the data adapter
DataGridView1.DataSource = dt.DefaultView