Sql 如何修复?这表明一次性物品从未被处理过

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

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 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