Was hier falsch ist, bekomme ich immer einige böse Fehler, auch wenn der gleiche Code, den ich früher verwendete, funktioniert. Aber wenn ich es auf ein anderes Formular anwende, gibt es den obigen Fehler. hier ist mein Code:kein Wert für einen oder mehrere erforderliche Parameter
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
Und hier ist der Code in der Schaltfläche, die die Daten zu aktualisieren versucht:
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
was hier falsch sein könnte?
Sieht aus wie Code reif für SQL-Injektion zu mir (obwohl nicht DML, da Jet/ACE mehrere Anweisungen nicht ausführen kann). Sie sollten wirklich Parameter verwenden. –
Ich hätte nie gedacht, dass SQL-Injection in Client-Anwendungen existieren könnte, die über vb.net erstellt wurden. Danke – user225269
Mit einem Jet-Back-Ende ist das Risiko gering, da das einzige Risiko darin besteht, zu viele Daten zu enthüllen (indem der Benutzer versucht, Ihren Code auszunutzen und einen Ausdruck liefert, der für alle Zeilen den Wert TRUE ergibt) Problem an und für sich, insbesondere mit einem UPDATE, was dazu führen könnte, dass Daten in allen Zeilen anstatt nur in der gewünschten Teilmenge geändert werden. –