sql >> Base de Datos >  >> RDS >> Oracle

Cómo actualizar una columna BLOB, error ORA-00932, mientras funciona Insertar

Realmente pensé que estabas imaginando cosas cuando leí tu publicación. Por curiosidad, lo probé y me sorprendió que este error realmente ocurra.

Hay buenas noticias. Busqué y encontré esto:

¿Cómo puedo actualizar los datos en los campos CLOB utilizando una>> consulta preparada <

Resulta que cuando se usa una declaración de actualización con un LOB, el LOB debe declararse primero en los parámetros. Con eso en mente, obtuve el mismo error que tuviste con tu código, pero esto funcionó perfectamente:

public static bool StoreBlobImage(OracleConnection conn, string ArtNr, byte[] bImageJpg)
{
    bool Ok = false;
    string Sql = "update MyTable set Image = :Image where ArtNr = :ArtNr";

    using (OracleCommand cmd = new OracleCommand(Sql, conn))
    {
        cmd.Parameters.Add("Image", OracleDbType.Blob).Value = bImageJpg;
        cmd.Parameters.Add("ArtNr", OracleDbType.Varchar2, 8).Value = ArtNr;

        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (Exception TheException)
        {
        }
    }
    return Ok;
}

Simplemente cambiando los parámetros.

Le di un kudo a la pregunta y respuesta de esa pregunta original (el mismo tipo, en este caso).

Tiene razón, hay muy poco en la web en forma de ayuda para las actualizaciones de BLOB en Oracle.

Gran pregunta. Siento que aprendí algo hoy.

-- EDITAR --

Según la sugerencia de OP, hay otra solución, según el mismo hilo mencionado anteriormente, que puede evitar la necesidad de reorganizar los parámetros. Supongo que esto también podría ser útil si está actualizando varios LOB.

Cambiando el BindByName La propiedad también parece resolver el problema:

cmd.BindByName = true;