Jeg troede virkelig, du forestillede dig ting, da jeg læste dit indlæg. Af nysgerrighed prøvede jeg det og var overrasket over, at denne fejl virkelig opstår.
Der er gode nyheder. Jeg søgte rundt og fandt dette:
Hvordan kan jeg opdatere data i CLOB-felter ved hjælp af en>> forberedt forespørgsel <
Det viser sig, når du bruger en opdateringssætning med en LOB, at LOB skal deklareres først i parametrene. Med det i tankerne fik jeg den samme fejl, som du fik med din kode, men dette fungerede perfekt:
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;
}
Simpelthen ved at skifte parametrene.
Jeg gav en ros til spørgsmålet og svaret på det oprindelige spørgsmål (samme fyr, i dette tilfælde).
Du har ret, der er meget lidt på nettet i vejen for hjælp til opdateringer om BLOB'er i Oracle.
Godt spørgsmål. Jeg føler, at jeg har lært noget i dag.
-- REDIGER --
I henhold til OP's forslag er der en anden rettelse, ifølge den samme tråd, der refereres til ovenfor, der kan forhindre nødvendigheden af at omarrangere parametrene. Mit gæt er, at dette også kan være nyttigt, hvis du opdaterer flere LOB'er.
Skift BindByName
Ejendom ser også ud til at løse problemet:
cmd.BindByName = true;