我有一个表格,它从用户在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
答案 0 :(得分:4)
您使用的是什么RDBMS?
SELECT * FROM ATG WHERE术语LIKE'% 表达%'
不要将文本框中的值直接传递到查询字符串中。
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注入。