none
Actualizar registro con SQLCe en VB.NET RRS feed

  • Pregunta

  • Saludos expertos, una nueva consulta. Estoy utilizando SqlCe en una aplicacion WinForm, y me encuentro con que el Update no funciona. Cuando lo ejecuto se detiene en el ExecuteNonQuery y me presenta este error:

    "An unhandled exception of type 'System.Data.SqlServerCe.SqlCeException'

    occurred in System.Data.SqlServerCe.dll"

    La tabla que utilizo tiene esta estructura:

    tbEmpleados

    id (int, pk, autoincrement)

    nombre (nvarchar 50)

    telefono (nvarchar 12)

    fechaInicio (Datetime)

    Departamento (nvarchar 50)

    Y este es el código que estoy implementando:

    Sub editarEmpleado()
            cn.Close()

            query = "UPDATE tbEmpleados SET nombre=@nombre, telefono=@telefono "
            query = query + " fechaInicio=@fecha,  departamento=@departamento"
            query = query + " WHERE id='" & txtId.Text & "' "

            Dim cmd As New SqlCeCommand(query, cn)

            cmd.Parameters.AddWithValue("@nombre", Convert.ToString(txtNombre.Text))
            cmd.Parameters.AddWithValue("@telefono", Convert.ToString(txtTelefono.Text))
            cmd.Parameters.AddWithValue("@fecha", Convert.ToDateTime(dtpFechaInicio.Text))
            cmd.Parameters.AddWithValue("@departamento", Convert.ToString(txtDpto.Text))

            cn.Open()
            cmd.ExecuteNonQuery()
            cn.Close()

            MessageBox.Show("EMPLEADO MODIFICADO")
            limpiar()
            cargarEmpleados()
        End Sub

    Desde ya agradezco sus comentarios.

    miércoles, 27 de agosto de 2014 18:25

Respuestas

  • "soyeddygh" escribió:

    > Estoy utilizando SqlCe en una aplicacion WinForm, y me encuentro
    > con que el Update no funciona. Cuando lo ejecuto se detiene en
    > el ExecuteNonQuery y me presenta este error:
    >
    > "An unhandled exception of type 'System.Data.SqlServerCe.SqlCeException'
    > occurred in System.Data.SqlServerCe.dll"

    Sí, nos dices que se ha producido una excepción no controlada del tipo SqlCeException, pero no nos indicas nada más, por lo que es complicado saber lo que está ocurriendo para que obtengas esa excepción.

    Prueba a ver si ejecutando el procedimiento como indico a continuación dejas de obtener el error indicado:

        Sub EditarEmpleado()
    
            Try
                Using cn As New SqlCeConnection(escribe aquí tu cadena de conexión)
    
                    Dim cmd As SqlCeCommand = cn.CreateCommand()
    
                    cmd.CommandText = _
                        "UPDATE tbEmpleados " & _
                        "SET nombre=@nombre, telefono=@teléfono, " & _
                        "fechaInicio=@fecha, departamento=@departamento " & _
                        "WHERE id=@id"
    
                    cmd.Parameters.AddWithValue("@nombre", txtNombre.Text)
                    cmd.Parameters.AddWithValue("@telefono", txtTelefono.Text)
                    cmd.Parameters.AddWithValue("@fecha", dtpFechaInicio.Value.Date)
                    cmd.Parameters.AddWithValue("@departamento", txtDpto.Text)
                    cmd.Parameters.AddWithValue("@id", txtId.Text)
    
                    cn.Open()
    
                    cmd.ExecuteNonQuery()
    
                    MessageBox.Show("EMPLEADO MODIFICADO")
    
                End Using
    
                limpiar()
                cargarEmpleados()
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub

    Y si continúas teniendo errores, mejor será que aportes más detalles sobre el mensaje de error que estás obteniendo. ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    • Editado Enrique M. MontejoModerator miércoles, 27 de agosto de 2014 22:13 Insertar coma tras el parámetro @teléfono
    • Marcado como respuesta soyeddygh jueves, 28 de agosto de 2014 18:07
    miércoles, 27 de agosto de 2014 18:48
    Moderador
  • > query = "UPDATE tbEmpleados SET nombre=@nombre, telefono=@telefono "
    > query = query + " fechaInicio=@fecha,  departamento=@departamento"
    > query = query + " WHERE id='" & txtId.Text & "' "

    Falta una coma entre los valores de los campos telefono y fechaInicio, y como me he limitado a copiar/pegar tu consulta SQL, pues ni me ha dado yo tampoco cuenta de ello. :-(

    Deja la consulta SQL de actualización así:

        cmd.CommandText = _
            "UPDATE tbEmpleados " & _
            "SET nombre=@nombre, telefono=@telefono, " & _
            "fechaInicio=@fecha, departamento=@departamento " & _
            "WHERE id=@id"


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 27 de agosto de 2014 22:17
    Moderador
  • Hola:

    "id (int, pk, autoincrement)"
    "WHERE id='" & txtId.Text & "' " "

    El campo id es numerico, por lo tanto las comillas simples que pones en la segunda linea te sobran
    Falta una coma entre los valores de los campos telefono  y fechaInicio.

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta soyeddygh jueves, 28 de agosto de 2014 18:07
    jueves, 28 de agosto de 2014 7:28

Todas las respuestas

  • "soyeddygh" escribió:

    > Estoy utilizando SqlCe en una aplicacion WinForm, y me encuentro
    > con que el Update no funciona. Cuando lo ejecuto se detiene en
    > el ExecuteNonQuery y me presenta este error:
    >
    > "An unhandled exception of type 'System.Data.SqlServerCe.SqlCeException'
    > occurred in System.Data.SqlServerCe.dll"

    Sí, nos dices que se ha producido una excepción no controlada del tipo SqlCeException, pero no nos indicas nada más, por lo que es complicado saber lo que está ocurriendo para que obtengas esa excepción.

    Prueba a ver si ejecutando el procedimiento como indico a continuación dejas de obtener el error indicado:

        Sub EditarEmpleado()
    
            Try
                Using cn As New SqlCeConnection(escribe aquí tu cadena de conexión)
    
                    Dim cmd As SqlCeCommand = cn.CreateCommand()
    
                    cmd.CommandText = _
                        "UPDATE tbEmpleados " & _
                        "SET nombre=@nombre, telefono=@teléfono, " & _
                        "fechaInicio=@fecha, departamento=@departamento " & _
                        "WHERE id=@id"
    
                    cmd.Parameters.AddWithValue("@nombre", txtNombre.Text)
                    cmd.Parameters.AddWithValue("@telefono", txtTelefono.Text)
                    cmd.Parameters.AddWithValue("@fecha", dtpFechaInicio.Value.Date)
                    cmd.Parameters.AddWithValue("@departamento", txtDpto.Text)
                    cmd.Parameters.AddWithValue("@id", txtId.Text)
    
                    cn.Open()
    
                    cmd.ExecuteNonQuery()
    
                    MessageBox.Show("EMPLEADO MODIFICADO")
    
                End Using
    
                limpiar()
                cargarEmpleados()
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub

    Y si continúas teniendo errores, mejor será que aportes más detalles sobre el mensaje de error que estás obteniendo. ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    • Editado Enrique M. MontejoModerator miércoles, 27 de agosto de 2014 22:13 Insertar coma tras el parámetro @teléfono
    • Marcado como respuesta soyeddygh jueves, 28 de agosto de 2014 18:07
    miércoles, 27 de agosto de 2014 18:48
    Moderador
  • Saludos Sr. Martinez, Gracias por responder... los detalles que aporto son los que hasta ahora obtengo... 

    Probé con el código que me aportaba, gracias al try se captara el error pero continua sin ejecutarse la modificación en el registro, que al final es lo que nos interesa que suceda.

    Aquí una muestra del error capturado.

    miércoles, 27 de agosto de 2014 19:57
  • > query = "UPDATE tbEmpleados SET nombre=@nombre, telefono=@telefono "
    > query = query + " fechaInicio=@fecha,  departamento=@departamento"
    > query = query + " WHERE id='" & txtId.Text & "' "

    Falta una coma entre los valores de los campos telefono y fechaInicio, y como me he limitado a copiar/pegar tu consulta SQL, pues ni me ha dado yo tampoco cuenta de ello. :-(

    Deja la consulta SQL de actualización así:

        cmd.CommandText = _
            "UPDATE tbEmpleados " & _
            "SET nombre=@nombre, telefono=@telefono, " & _
            "fechaInicio=@fecha, departamento=@departamento " & _
            "WHERE id=@id"


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 27 de agosto de 2014 22:17
    Moderador
  • Hola:

    "id (int, pk, autoincrement)"
    "WHERE id='" & txtId.Text & "' " "

    El campo id es numerico, por lo tanto las comillas simples que pones en la segunda linea te sobran
    Falta una coma entre los valores de los campos telefono  y fechaInicio.

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta soyeddygh jueves, 28 de agosto de 2014 18:07
    jueves, 28 de agosto de 2014 7:28