Saya benar-benar berpikir Anda sedang membayangkan hal-hal ketika saya membaca posting Anda. Karena penasaran, saya mencobanya dan kagum bahwa kesalahan ini benar-benar terjadi.
Ada kabar baik. Saya mencari-cari dan menemukan ini:
Bagaimana saya bisa memperbarui data di bidang CLOB menggunakan>> kueri yang disiapkan <
Ternyata saat menggunakan pernyataan update dengan LOB, LOB harus dideklarasikan terlebih dahulu di parameter. Dengan mengingat hal itu, saya mendapatkan kesalahan yang sama dengan yang Anda lakukan dengan kode Anda, tetapi ini bekerja dengan sempurna:
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;
}
Cukup dengan mengganti parameter.
Saya memberikan pujian untuk pertanyaan dan jawaban dari pertanyaan awal itu (orang yang sama, dalam hal ini).
Anda benar, hanya ada sedikit bantuan di web untuk pembaruan tentang BLOB di Oracle.
Pertanyaan bagus. Saya merasa seperti saya belajar sesuatu hari ini.
-- EDIT --
Sesuai saran OP, ada perbaikan lain, per utas yang sama yang dirujuk di atas, yang dapat mencegah perlunya mengatur ulang parameter. Dugaan saya, ini mungkin juga berguna jika Anda memperbarui beberapa LOB.
Mengganti BindByName
Properti tampaknya juga menyelesaikan masalah:
cmd.BindByName = true;