none
Actualizar registro

    Question

  • He probado actualizar registros con ADO en VB 2008, pero tengo un problema.

     

    Ya tengo delcarados los comandos, conexiones y lectores.

     

    Code Snippet

    Dim SQL as string

     

    SQL="Update Tabla set Campo='" & Textbox.text & "'"

     

    Comando.CommandText=SQL

    Comando.Connection.Open

    Comando.Executenonquery

    Comando.Connection.Close

     

     

     

    todo bien si el texto a tratar es normal, por ejemplo LOPEZ, RAMIREZ, PEREZ, etc. pero cuando intento me marca error cuando intento ingresar un texto asi: O'NEALL.

     

    LA comilla simple del texto me devuelve un error.

     

    Trate tambien de pasarlo por parametros:

     

    Code Snippet

    Dim SQL as String

    Dim pNom as New OleDBParameter ("@Nom", OledbType.Char)

     

    pNom.Value = TextBox.Text

     

    SQL="Update Tabla set Campo =@Nom"

     

    Comando.Parameter.Add(pNom)

     

    Comando.CommandText = SQL

    Comando.Connection.Open

    Comando.ExecuteNonQuery

    Comando.Connection.Close

     

    Comando.Parameter.Remove(pNom)

     

     

     

    Pero no me funciona.

     

    Alguien sabe la solucion a este problema?

     

    Saludos.

    Monday, August 11, 2008 11:53 PM

Answers

  • Gracias por sus respuestas.

     

    He encontrado la solucion:

     

    He guardado mediante el uso de parametros, pero si un parametro en el procedimiento no es usado, no se ejecuta el Update.

     

    Si utilizo la clausula Where de la instruccion, debo meter una variable y no un parametro.

     

    Saludos y Gracias.

    Tuesday, August 26, 2008 7:49 PM

All replies

  • Hola,

     

    ¿En que momento del código asignas la conexión con tu BBDD?

     

    Un Saludo

     

    Tuesday, August 12, 2008 6:36 AM
  • Hola,

     

    Echale un ojo a esto anda:

     

    http://www.moreplus.es/index.aspx?accion=articulo&id=110

     

    Que ademas veo que vas a tener un grabe problema de seguridad de Inyeccion SQL

     

    Un saludo.

     

     

    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.

    Javier Conesa

    MCP - Analista Programador

    Web: http://www.moreplus.es/index.aspx


    Tuesday, August 12, 2008 6:53 AM
  • Hola Karlo... lo que tienes que hacer es colocar un apostrofe mas para que la cadena te kede de esta manera

    SQL="UPDATE Tabla set Campo = 'O''NELL' "


    entonces!!!... tendras que validar cada textbox que utilizes para saber si tiene apostrofes y que agregue el nuevo apostrofe

    Code Snippet

    Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

    If (TextBox1.Text.Contains("'")) Then
    Dim posicion As Integer = InStr(TextBox1.Text, "'")
    TextBox1.Text = TextBox1.Text.Insert(posicion, "'")
    End If

    End Sub


    Saludos,


    Tuesday, August 12, 2008 5:23 PM
  • correpción al ejemplo anterior.

    no puedes aplicar la solución en ese punto ya que el usuario vera los dos apostrofes y llamara diciendo que hay un error en el aplicativo así que para evitar esto lo haremos en otro punto donde no sea visible al usuario.

    siguiendo tu primer ejemplo:

    Code Snippet

    Dim nuevoValor As String, SQL As String

    If (TextBox1.Text.Contains("'")) Then
    nuevoValor = TextBox1.Text.Insert(TextBox1.Text.IndexOf("'"), "'")
    Else
    nuevoValor = TextBox1.Text
    End If

    SQL = "UPDATE Tabla Set Campo = '" & nuevoValor & "'"


    ó el segun ejemplo:

    Code Snippet

    Dim SQL as StringComando.Parameter.Remove(pNom)

    Dim pNom as New OleDBParameter ("@Nom", OledbType.Char)


    If (TextBox1.Text.Contains("'")) Then

    pNom.Value = TextBox1.Text.Insert(TextBox1.Text.IndexOf("'"), "'")
    Else
    pNom.Value = TextBox1.Text
    End If


    SQL="Update Tabla set Campo =@Nom"

     

    Comando.Parameter.Add(pNom)

     

    Comando.CommandText = SQL

    Comando.Connection.Open

    Comando.ExecuteNonQuery

    Comando.Connection.Close


    he hice un pequeño cambio de comando pero el funciona es igual



    Saludos



    Tuesday, August 12, 2008 7:16 PM
  • Gracias por sus respuestas.

     

    He encontrado la solucion:

     

    He guardado mediante el uso de parametros, pero si un parametro en el procedimiento no es usado, no se ejecuta el Update.

     

    Si utilizo la clausula Where de la instruccion, debo meter una variable y no un parametro.

     

    Saludos y Gracias.

    Tuesday, August 26, 2008 7:49 PM