2010-03-04 11 views
6

Lo que está mal aquí, siempre recibo algunos errores desagradables incluso si funciona el mismo código que utilicé anteriormente. Pero cuando lo aplico a otra forma, me da el error anterior. aquí es mi código:no se da ningún valor para uno o más parámetros requeridos

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 

Y aquí está el código en el botón que trata de actualizar los datos:

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 

lo que podría ser mal aquí?

+1

Parece que el código está listo para la inyección de SQL (aunque no es DML porque Jet/ACE no puede ejecutar varias instrucciones). Realmente deberías estar usando parámetros. –

+0

Nunca pensé que la inyección de SQL podría existir en aplicaciones de clientes realizadas a través de vb.net. gracias – user225269

+0

Con un back-end de Jet, el riesgo es bajo, ya que el único riesgo es revelar demasiados datos (por parte del usuario que intenta explotar su código poniendo una expresión que evaluará TRUE para todas las filas), pero eso puede ser problema en sí mismo, particularmente con una ACTUALIZACIÓN, que podría terminar cambiando datos en todas las filas en lugar de solo en el subconjunto que se desea. –

Respuesta

11

El motivo habitual de este error es un valor faltante o mal escrito. Parece probable que adminName sea nulo o una cadena de longitud cero.

+0

Lo siento por el problema, era solo un simple error de tipeo: AdminPassS = '"& adminPass debe ser AdminPass ... pero de todas formas gracias por responder – user225269

22

Un buen truco para hacer frente a un error de no value given for one or more required parameters en el desarrollo de un acceso posterior final es para agarrar el contenido de la CommandText y pegarlo en una consulta ficticia de acceso en sí. Luego, Access le ofrecerá una ventana emergente que identifica qué campo está causando el problema (generalmente un error tipográfico, como en su caso).

+0

bueno, es muy lindo aquí, hay muchos buenos trucos I puede obtener de monstruos como usted, gracias :) – user225269

+0

Gracias - al tener que lidiar con bases de datos heredadas, ¡he olvidado todos mis trucos de acceso! – Meg

1

Al pegar el texto de comando en el acceso y aparece el mensaje de acceso indicándole qué campo es el problema, si no aparece, intente adjuntar el nombre del campo entre corchetes. [] Es posible que una de sus columnas contenga una palabra clave. Esto me pasó a mí, que la columna LL_ID - tuve que cambiarlo a [LL_ID].

Cuestiones relacionadas