在VB中使用“Like”时出错

时间:2011-07-03 08:06:29

标签: sql vb.net visual-studio-2010 query-parameters

我有一个表格,它从用户在TextBox中获取输入,以在网格上显示(“包含”)记录/数据。但是,我无法实现输入数据的事情。我一直试图解决这个问题。 Dtatbase是MS Access。其他一切都很好。谢谢任何帮助表示赞赏。

这是我的代码:我没有为此查询在表单网格中获取任何值。

P.S:我只是个初学者:)谢谢!

Imports System.Data.OleDb

Public Class Form1

    Dim dbConnection As OleDbConnection
    Dim dbCommand As OleDbCommand
    Dim dbDataAdapter As OleDbDataAdapter
    Dim ConnectString As String = "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source=atg.mdb"
    Dim dtATG As DataTable
    Dim Searchq, SQLStr As String

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

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim dtATG As New DataTable() ''// Create New Datatable

        Searchq = TextBox1.Text
        dbDataAdapter = New OleDbDataAdapter
        SQLStr = "SELECT * FROM ATG WHERE Term Like " & """%" & CStr(TextBox1.Text) & "%"""

        dbDataAdapter.Fill(dtATG)

        DataGrid1.DataSource = dtATG
    End Sub

End Class

1 个答案:

答案 0 :(得分:4)

您使用的是什么RDBMS?

  

SELECT * FROM ATG WHERE术语LIKE'%   表达%'

不要将文本框中的值直接传递到查询字符串中。

  1. 您没有列出任何选择标准,也就是列,您需要在SELECT和FROM之间指定至少一列,或者像我上面那样使用select all asterisk。
  2. 在你的LIKE子句中,你使用的是星号,而不是模数也就是百分号。在SQL中,字段通配符是%not *。
  3. 您正在尝试使用文本框中的值构建字符串。除非该文本框在某人可以输入的情况下进行验证:
  4.   

    123' ; DROP TABLE ATG;

    所以你渲染的字符串是:

    SELECT * FROM ATG WHERE Term LIKE '% 123'; DROP TABLE ATG; %'
    

    现在从技术上讲,这是无效的SQL,但Query中的前两个语句,如果执行则会从数据库中删除该表。一个很好的解决方案是在将值传递给SQL查询之前检查表单输入,并使用SQL参数构建查询,而不必担心人们传入恶意语句:

    Read here for OleDb samples using SQL Parameters

    通过接口传递恶意语句以通过SQL导致RDMBS问题称为SQL注入。