sql >> Databáze >  >> RDS >> Oracle

Jak aktualizovat sloupec BLOB, chyba ORA-00932, zatímco Insert funguje

Opravdu jsem si myslel, že si něco vymýšlíš, když jsem četl tvůj příspěvek. Ze zvědavosti jsem to zkusil a byl jsem ohromen, že k této chybě skutečně dochází.

Máme dobré zprávy. Prohledal jsem a našel toto:

Jak mohu aktualizovat data v polích CLOB pomocí>> připraveného dotazu <

Ukázalo se, že při použití aktualizačního příkazu s LOB musí být LOB deklarován jako první v parametrech. S ohledem na to jsem dostal stejnou chybu, jakou jste udělali se svým kódem, ale fungovalo to perfektně:

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;
}

Jednoduše přepnutím parametrů.

Pochválil jsem otázku a odpověď na původní otázku (v tomto případě ten samý).

Máte pravdu, na webu je velmi málo nápovědy pro aktualizace objektů BLOB v Oracle.

Skvělá otázka. Mám pocit, že jsem se dnes něco naučil.

-- UPRAVIT --

Podle návrhu OP existuje další oprava, na stejné vlákno, na které se odkazuje výše, která může zabránit nutnosti přeskupit parametry. Můj odhad je, že by se to mohlo hodit, pokud aktualizujete více LOBů.

Přepínání BindByName Zdá se, že problém také řeší služba:

cmd.BindByName = true;



  1. SQL oracle začátečnické otázky

  2. Jak používat UPDATE z SELECT v SQL Server

  3. trvání mysql a čas načtení

  4. Jak nastavím MySQL pro práci s C#?