none
Error al enviar datos desde un textbox a un BD access RRS feed

  • Pregunta

  • Hola, tengo un problema que no se como resolver. Necesito enviar datos desde un textbox a una BD de access pero el problema es que me salta este error "System.Data.OleDb.OleDbException: 'No se han especificado valores para algunos de los parámetros requeridos.' "

    El codigo seria asi:

     Dim conect_string As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Trabajo\Presentador debito automatico de tarjetas de credito\PDATC\PDATC\BDtar.mdb"
            Dim conect As New OleDb.OleDbConnection(conect_string)
            conect.Open()

            Dim query As String = "INSERT INTO Visa ([Id_Cliente], [DNI], [Apellido], [Nombre], [Telefono], [E-mail], [Numero Tarjeta], [Codigo Seguridad], [Fecha vencimiento tarjeta]) VALUES (@Idcliente ,@DNI ,@Apellido ,@Nombre ,@Telefono ,@E-mail ,@Numerotarjeta ,@Codigoseguridad,@Fechavencimientotarjeta )"
            Dim comando As New OleDb.OleDbCommand(query, conect)
            comando.Parameters.AddWithValue("@Idcliente", Convert.ToInt64(TBEic.Text))
            comando.Parameters.AddWithValue("@DNI", Convert.ToInt64(TBEdni.Text))
            comando.Parameters.AddWithValue("@Apellido", TBEa.Text)
            comando.Parameters.AddWithValue("@Nombre", TBEn.Text)
            comando.Parameters.AddWithValue("@Telefono", Convert.ToInt64(TBEt.Text))
            comando.Parameters.AddWithValue("@E-mail", TBEe.Text)
            comando.Parameters.AddWithValue("@Numerotarjeta", TBEnt.Text)
            comando.Parameters.AddWithValue("@Codigoseguridad", Convert.ToInt64(TBEcs.Text))
            comando.Parameters.AddWithValue("@Fechavencimientotarjeta", TBEfvt.Text)
            comando.ExecuteNonQuery()
    El visual me tira error justo en la linea comando.ExecuteNonQuery(). Ademas ya me fije en la BD de access y los campos estan bien escritos.

    Si pueden ayudarme muchas gracias

    viernes, 7 de septiembre de 2018 17:44

Respuestas

  • El driver de la base de datos da ese error de "'No se han especificado valores para algunos de los parámetros requeridos" cuando alguno de los parámetros está vacío. Es decir, aunque tú en el código sí que has escrito la línea que le asigna el valor al parámetro, si el valor es un "null" ("Nothing" en VB), entonces el driver de la base de datos se cree que no le has asignado el valor y da el error que estás viendo.

    En tu caso, y dado que todos los valores que pasas provienen de texboxes, esto indicaría que alguno de los textboxes estaba vacío. Tendrías que meter un "If" para comprobar si está vacío, y en ese caso grabar en la base de datos el valor DBNull.Value, si es que realmente quieres grabar un NULL en la base de datos para indicar que el dato quedó vacío.

    Por cierto, aparte de lo anterior, observo un potencial problema en el "@E-mail". No está permitido que el nombre de un parámetro contenga un guión. El sistema lo interpretará como "@E menos mail", y da un error de que no le has asignado valor al parámetro @E, y aunque superase ese error luego daría otro error por no conocer la columna "mail".

    • Marcado como respuesta Pablo Rubio miércoles, 12 de septiembre de 2018 16:52
    sábado, 8 de septiembre de 2018 7:38

Todas las respuestas

  • El driver de la base de datos da ese error de "'No se han especificado valores para algunos de los parámetros requeridos" cuando alguno de los parámetros está vacío. Es decir, aunque tú en el código sí que has escrito la línea que le asigna el valor al parámetro, si el valor es un "null" ("Nothing" en VB), entonces el driver de la base de datos se cree que no le has asignado el valor y da el error que estás viendo.

    En tu caso, y dado que todos los valores que pasas provienen de texboxes, esto indicaría que alguno de los textboxes estaba vacío. Tendrías que meter un "If" para comprobar si está vacío, y en ese caso grabar en la base de datos el valor DBNull.Value, si es que realmente quieres grabar un NULL en la base de datos para indicar que el dato quedó vacío.

    Por cierto, aparte de lo anterior, observo un potencial problema en el "@E-mail". No está permitido que el nombre de un parámetro contenga un guión. El sistema lo interpretará como "@E menos mail", y da un error de que no le has asignado valor al parámetro @E, y aunque superase ese error luego daría otro error por no conocer la columna "mail".

    • Marcado como respuesta Pablo Rubio miércoles, 12 de septiembre de 2018 16:52
    sábado, 8 de septiembre de 2018 7:38
  • El driver de la base de datos da ese error de "'No se han especificado valores para algunos de los parámetros requeridos" cuando alguno de los parámetros está vacío. Es decir, aunque tú en el código sí que has escrito la línea que le asigna el valor al parámetro, si el valor es un "null" ("Nothing" en VB), entonces el driver de la base de datos se cree que no le has asignado el valor y da el error que estás viendo.

    En tu caso, y dado que todos los valores que pasas provienen de texboxes, esto indicaría que alguno de los textboxes estaba vacío. Tendrías que meter un "If" para comprobar si está vacío, y en ese caso grabar en la base de datos el valor DBNull.Value, si es que realmente quieres grabar un NULL en la base de datos para indicar que el dato quedó vacío.

    Por cierto, aparte de lo anterior, observo un potencial problema en el "@E-mail". No está permitido que el nombre de un parámetro contenga un guión. El sistema lo interpretará como "@E menos mail", y da un error de que no le has asignado valor al parámetro @E, y aunque superase ese error luego daría otro error por no conocer la columna "mail".


    Genial, el problema era con el "-" del email.
    Gracias por la ayuda.
    viernes, 14 de septiembre de 2018 18:06