2010-03-04 14 views
6

Cosa c'è di sbagliato qui, ottengo sempre alcuni errori sgradevoli anche se funziona lo stesso codice che ho usato in precedenza. Ma quando lo applico ad un altro modulo mi dà l'errore sopra. ecco il mio codice:nessun valore dato per uno o più parametri richiesti

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 

Ed ecco il codice nel pulsante che cerca di aggiornare i dati:

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 

quello che potrebbe essere sbagliato qui?

+1

Sembra il codice maturo per l'iniezione SQL (ma non DML poiché Jet/ACE non può eseguire più istruzioni). Dovresti davvero usare i parametri. –

+0

Non ho mai pensato che SQL injection potesse esistere nelle applicazioni client realizzate tramite vb.net. grazie – user225269

+0

Con un back-end Jet, il rischio è basso, poiché l'unico rischio è quello di rivelare troppi dati (l'utente tenta di sfruttare il codice inserendo un'espressione che valuterà su TRUE per tutte le righe), ma che può essere un problema in sé e per sé, in particolare con un UPDATE, che potrebbe finire per modificare i dati in tutte le righe anziché solo nel sottogruppo desiderato. –

risposta

11

Il solito motivo di questo errore è un valore mancante o errato. Sembra probabile che adminName sia Null o una stringa di lunghezza zero.

+0

Mi è dispiaciuto per il problema che si trattava di un semplice errore di battitura: AdminPassS = '"& adminPass deve essere AdminPass..ma comunque grazie per aver risposto – user225269

22

Un buon trucco per trattare con un errore di no value given for one or more required parameters Quando si sviluppa per back-end è un Access per afferrare il contenuto del CommandText e incollarlo in una query di manichino in Access per sé. Quindi Access ti offrirà un popup che identifica il campo che sta causando il problema (di solito un errore di battitura, come nel tuo caso).

+0

bello, è davvero bello qui, ci sono molti buoni trucchi posso ottenere da mostri come te, grazie :) – user225269

+0

Grazie - avendo a che fare con database legacy, ho dimenticato tutti i trucchi di accesso! – Meg

1

Quando si incolla il testo del comando in se stessa e l'accesso di accesso si apre ti dice quale campo è il problema, se non sembra essere un tipo, provare che racchiude il nome del campo tra parentesi quadre. [] È possibile che una delle tue colonne possa contenere una parola chiave. Questo è successo a me, che la colonna LL_ID - Ho dovuto cambiarlo in [LL_ID].

Problemi correlati