none
ExecuteNonQuery() Error en sintaxis en la instruccion INSERT INTO RRS feed

  • Pregunta

  • Buen dia a todos,

    Tengo este problema, estoy intentando insertar unos cuantos datos, la situación es que inicialmente estaba usando la librería data.ODBC, cuando cambie a data.OleDb sin cambiar absolutamente nada mas que esto comenzó el problema.... 

    El código es el siguiente:

    Con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\BDD.mdb")

                If Con.State = 0 Then Con.Open()
                Com = New OleDbCommand
                With Com
                    .Connection = Con
                    .CommandType = CommandType.Text
                    .CommandText = "INSERT INTO maestros (nombre, apellido, telefono, registro, divicion, direccion, materia) VALUES ('" + TextBox_nom.Text + "','" + TextBox_ap.Text + "','" + TextBox_tel.Text + "','" + TextBox_reg.Text + "','" + TextBox_div.Text + "','" + TextBox_di.Text + "','" + TextBox_ma.Text + "')"
                    .ExecuteNonQuery()
                End With

    De antemano muchas gracias a todos por su enorme ayuda.

    miércoles, 4 de junio de 2014 4:15

Todas las respuestas

  • Tambien en forma de prueba - error estoy intentando hacerlo asi:

    .CommandText = "INSERT INTO maestros (nombre,apellido,telefono,registro,divicion,direccion,materia) VALUES (@nombree, @apellidoo, @telefonoo, @registroo,@divicionn,@direccionn,@materias)"
                    .Parameters.Add(New OleDbParameter("@nombree", DbType.String))
                    .Parameters.Add(New OleDbParameter("@apellidoo", DbType.String))
                    .Parameters.Add(New OleDbParameter("@telefonoo", DbType.String))
                    .Parameters.Add(New OleDbParameter("@registroo", DbType.String))
                    .Parameters.Add(New OleDbParameter("@divicionn", DbType.String))
                    .Parameters.Add(New OleDbParameter("@direccionn", DbType.String))
                    .Parameters.Add(New OleDbParameter("@materiaa", DbType.String))
                    .Prepare()
                    .Parameters("@nombree").Value = TextBox_nom.Text
                    .Parameters("@apellidoo").Value = TextBox_ap.Text
                    .Parameters("@telefonoo").Value = TextBox_tel.Text
                    .Parameters("@registroo").Value = TextBox_reg.Text
                    .Parameters("@divicionn").Value = TextBox_div.Text
                    .Parameters("@direccionn").Value = TextBox_di.Text
                    .Parameters("@materiaa").Value = TextBox_ma.Text
                    .ExecuteNonQuery()

    Asi me muestra como error que ".Prepare requiere que todos los parametros tengan un tipo establecido de forma explicita.

    miércoles, 4 de junio de 2014 5:05
  • Siguiendo con las pruebas ahora lo hago asi, ya no arroja ningun error pero tampoco actualiza la base de datos.... 

    SQL = "INSERT INTO maestros (nombre,apellido,telefono,registro,divicion,direccion,materia) VALUES (@nombree, @apellidoo, @telefonoo, @registroo,@divicionn,@direccionn,@materiaa)"
                Com = New OleDbCommand(SQL, Con)
                Com.Parameters.AddWithValue("@nombree", TextBox_nom.Text)
                Com.Parameters.AddWithValue("@apellidoo", TextBox_ap.Text)
                Com.Parameters.AddWithValue("@telefonoo", TextBox_tel.Text)
                Com.Parameters.AddWithValue("@registroo", TextBox_reg.Text)
                Com.Parameters.AddWithValue("@divicionn", TextBox_div.Text)
                Com.Parameters.AddWithValue("@direccionn", TextBox_di.Text)
                Com.Parameters.AddWithValue("@materiaa", TextBox_ma.Text)

    Com.ExecuteNonQuery()

    Con.Close()

    MsgBox("Ingreso de maestro correcto")

    miércoles, 4 de junio de 2014 5:35
  • Buen día Ivan, podrías probar convirtiendo todos los valores de los textbox en string, en especial el del teléfono, por ej. TextBox_tel.Text.ToString.

       Saludos


    Daniela Banchero

    viernes, 6 de junio de 2014 11:34
  • Hola Ivan:

     Tal cual como lo has echo la tercera vez esa es la forma correcta de hacer un insert, update a una base de datos sea cual sea esta, me refiero, a que en lugar de concatenar los valores de los controles en la instrucción SQL uses parámetros, de esta manera previenes futuros ataques por inyección SQL o errores como el que estabas recibiendo.

    SQL = "INSERT INTO maestros (nombre,apellido,telefono,registro,divicion,direccion,materia) VALUES (@nombree, @apellidoo, @telefonoo, @registroo,@divicionn,@direccionn,@materiaa)"
                Com = New OleDbCommand(SQL, Con)
                Com.Parameters.AddWithValue("@nombree", TextBox_nom.Text)
                Com.Parameters.AddWithValue("@apellidoo", TextBox_ap.Text)
                Com.Parameters.AddWithValue("@telefonoo", TextBox_tel.Text)
                Com.Parameters.AddWithValue("@registroo", TextBox_reg.Text)
                Com.Parameters.AddWithValue("@divicionn", TextBox_div.Text)
                Com.Parameters.AddWithValue("@direccionn", TextBox_di.Text)
                Com.Parameters.AddWithValue("@materiaa", TextBox_ma.Text)
    
    Com.ExecuteNonQuery()
    
    Con.Close()
    
    MsgBox("Ingreso de maestro correcto")

    Lo que mencionas que aun así no logras ver que la BD se afecte, creo que ese detalle podría venir de como es que estés trabajando con la base de datos, es decir, si es una base de datos que ADJUNTASTE al proyecto o esta totalmente independiente del mismo:

    *Base de datos Adjunta

     - Selecciona la base de datos desde el Vs y presiona F4 para ver sus propiedades, busca la opciones "Opciones de compilación" (creo que dice eso) y seleccionar NO COPIAR de esta manera evitaras que tu base de datos se sobreescriba cada vez que inicias tu aplicación.

    Si esto no soluciona tu problema, regresa y coméntanos tus resultados.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 6 de junio de 2014 14:17
  • Hola Daniela:

     Buen día Ivan, podrías probar convirtiendo todos los valores de los textbox en string, en especial el del teléfono, por ej. TextBox_tel.Text.ToString.

     Te comento que la propiedad TEXT de cualquier control devuelve el tipo de datos String, asi sea que su contenido visiblemente sea un numero...


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 6 de junio de 2014 14:19