【发布时间】:2011-01-23 15:21:39
【问题描述】:
这里出了什么问题,即使我之前使用的相同代码有效,我总是会遇到一些令人讨厌的错误。但是当我将它应用到其他形式时,它给了我上面的错误。 这是我的代码:
Imports System.Data.OleDb
Public Class Updater2
Public adminID As String
Public adminName As String
Public adminPass As String
Private con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;Jet OLEDB:Database Password=nrew123$%^;")
Private com As OleDb.OleDbCommand
Public Sub New()
con.Open()
com = New OleDb.OleDbCommand("Select * from admintable")
com.Connection = con
End Sub
Public Sub updates()
com.CommandText = "UPDATE admintable SET AdminName = '" & adminName & "', AdminPassS = '" & adminPass & "' WHERE ID = '" & adminID & "'"
com.ExecuteNonQuery()
End Sub
End Class
这是按钮中尝试更新数据的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
shikai.adminID = textbox1.text
shikai.adminName = TextBox4.Text
shikai.adminPass = TextBox3.Text
shikai.updates()
MsgBox("Successfully updated!")
End Sub
这里可能有什么问题?
【问题讨论】:
-
在我看来,SQL 注入的代码已经成熟(尽管不是 DML,因为 Jet/ACE 不能执行多个语句)。你真的应该使用参数。
-
我从没想过sql注入可以存在于通过vb.net制作的客户端应用程序中。谢谢
-
使用 Jet 后端,风险很低,因为唯一的风险是泄露太多数据(用户试图利用您的代码放入一个表达式,所有行的计算结果都为 TRUE) ,但这本身可能是一个问题,特别是对于 UPDATE,它最终可能会更改所有行中的数据,而不仅仅是所需的子集中。