Наистина си помислих, че си въобразяваш неща, когато прочетох поста ти. От любопитство го пробвах и бях изумен, че тази грешка наистина се появява.
Има добри новини. Разрових се и намерих това:
Оказва се, че когато използвате израз за актуализиране с LOB, LOB трябва да бъде деклариран първо в параметрите. Имайки това предвид, получих същата грешка, която направихте с вашия код, но това работи перфектно:
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;
}
Просто чрез превключване на параметрите.
Поздравих въпроса и отговора на този първоначален въпрос (в този случай същият човек).
Прав сте, в мрежата има много малко помощ за актуализации на BLOB в Oracle.
Страхотен въпрос. Имам чувството, че днес научих нещо.
-- РЕДАКТИРАНЕ --
По предложение на OP има друга корекция, за същата нишка, посочена по-горе, която може да предотврати необходимостта от пренареждане на параметрите. Предполагам, че това също може да е полезно, ако актуализирате множество LOB.
Превключване на BindByName
Изглежда, че собствеността също решава проблема:
cmd.BindByName = true;