2010-03-04 9 views
6

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?

+1

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. –

+0

Ich hätte nie gedacht, dass SQL-Injection in Client-Anwendungen existieren könnte, die über vb.net erstellt wurden. Danke – user225269

+0

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. –

Antwort

11

Der übliche Grund für diesen Fehler ist ein fehlender oder falsch geschriebener Wert. Es ist wahrscheinlich, dass adminName Null oder eine Zeichenfolge mit der Länge null ist.

+0

Ich habe es tut mir leid für die Probleme, es war nur ein Tippfehler: AdminPassS = '"& AdminPass muss AdminPass..aber jeder Weg danke für die Beantwortung – user225269

22

Ein guter Trick, um mit einem no value given for one or more required parameters Fehler zu tun, wenn für eine Access-Back-End-Entwicklung ist es, den Inhalt der CommandText und fügen Sie ihn in eine Dummy-Abfrage in Access selbst zu greifen. Dann bietet Ihnen Access ein Popup an, das anzeigt, welches Feld das Problem verursacht (normalerweise ein Tippfehler, wie in Ihrem Fall).

+0

nice one, es ist wirklich nett hier, es gibt viele gute Tricks, die ich kann von Monstern wie dir bekommen, danke :) – user225269

+0

Danke - mit Legacy-Datenbanken zu tun haben, habe ich alle meine Access-Tricks vergessen! – Meg

1

Wenn Sie den Befehlstext in den Zugriff selbst einfügen und Access erscheint und Ihnen mitteilt, welches Feld das Problem ist, versuchen Sie, den Feldnamen in eckige Klammern einzuschließen, wenn kein Typ angezeigt wird. [] Es ist möglich, dass eine Ihrer Spalten ein Schlüsselwort enthält. Dies ist mir passiert, die Spalte LL_ID - ich musste es in [LL_ID] ändern.

Verwandte Themen