0

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

这是我的代码:对于这个查询,我在表单网格中没有得到任何值。

PS:我只是一个初学者:) 谢谢!

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
4

1 回答 1

4

您使用的是什么 RDBMS?

SELECT * FROM ATG WHERE Term LIKE '% 表达式%'

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

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

123'; 删除表 ATG;

因此,您呈现的字符串将是:

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

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

在此处阅读使用 SQL 参数的 OleDb 示例

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

于 2011-07-03T08:15:47.210 回答