none
Error de comillas RRS feed

  • Pregunta

  • Buenas noches, tengo un problema y es que intento guardar en una base de datos una cadena de caracteres con comillas dentro y al leer la camilla la no se realiza bien la función de guardado a Sql, les dejo mi código para que le echen un vistazo.

                                                               |Ese error lo provoco para hacer las pruevas

             Try                                              |
                conexion.ConnectionString = "kkkk Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & My.Settings.Base &                           "\MachineEDA\Base de datos\DataBase.accdb"
                conexion.Open()
            Catch ex As Exception
                Dim dat As Date
                dat = Format(Now, "dd/MM/yyyy hh:mm:ss")
                comandosql.CommandText = "insert into Err (Fecha, Accion, Error) Values ('" & dat & "', '" & "Conectar con base de                   datos Access" & "', '" & ex.Message.ToString & "' )"
                comandosql.ExecuteNonQuery()
                MsgBox(ex.Message)
            End Try

    El probema esta en que devuelve en el ex.Message el error :  No se ha especificado un proveedor OLE DB en ConnectionString.  Un ejemplo sería, 'Provider=SQLOLEDB;'. Y las comillas del error se cruzan con las comillas del guardado de sql.

    El error que me da visual basic es: "Sintaxi incorrecta cerca de 'Provider'"

    lunes, 19 de junio de 2017 21:30

Respuestas

  • Tienes que escapar el símbolo de apóstrofo,  por ejemplo:

    & "', '" & ex.Message.Replace("'", "''") & "' )"

    Sin embargo, no es la forma adecuada de asignar un valor a un parámetro, debes acostumbrar a parametrizar la consulta:

    comandosql.CommandText = "INSERT INTO Err (Fecha, Accion, Error) VALUES (?, ?, ?)"
    comandosql.Parameters.AddWithValue("@Fecha", Date.Now)
    comandosql.Parameters.AddWithValue("@Accion", "Conectar con base de datos Access")
    comandosql.Parameters.AddWithValue("@Error", ex.Message)
    comandosql.ExecuteNonQuery()


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 19 de junio de 2017 22:03

Todas las respuestas

  • Hola

    No comprendo, el mensaje que te muestra ( No se ha especificado un proveedor OLE DB en ConnectionString.  Un ejemplo sería, 'Provider=SQLOLEDB;')se debe a esto:

    conexion.ConnectionString = "kkkk Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & My.Settings.Base & "\MachineEDA\Base de datos\DataBase.accdb"

    lo correcto debería ser:

    conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & My.Settings.Base & "\MachineEDA\Base de datos\DataBase.accdb"

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    lunes, 19 de junio de 2017 21:44
  • Tienes que escapar el símbolo de apóstrofo,  por ejemplo:

    & "', '" & ex.Message.Replace("'", "''") & "' )"

    Sin embargo, no es la forma adecuada de asignar un valor a un parámetro, debes acostumbrar a parametrizar la consulta:

    comandosql.CommandText = "INSERT INTO Err (Fecha, Accion, Error) VALUES (?, ?, ?)"
    comandosql.Parameters.AddWithValue("@Fecha", Date.Now)
    comandosql.Parameters.AddWithValue("@Accion", "Conectar con base de datos Access")
    comandosql.Parameters.AddWithValue("@Error", ex.Message)
    comandosql.ExecuteNonQuery()


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 19 de junio de 2017 22:03