私があなたの投稿を読んだとき、あなたは物事を想像していたのに、私は本当に。不思議なことに、私はそれを試してみましたが、このエラーが実際に発生することに驚いていました。
良い知らせがあります。私はあちこち見て、これを見つけました:
ODP(Oracle.DataAccess)で>>準備されたクエリ<<を使用してCLOBフィールドのデータを更新するにはどうすればよいですか?
LOBでupdateステートメントを使用する場合、最初にパラメーターで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;
}
パラメータを切り替えるだけです。
私はその元の質問の質問と回答に賞賛を与えました(この場合は同じ人)。
そうです、OracleのBLOBの更新を支援する方法として、Web上には貴重なものはほとんどありません。
素晴らしい質問です。今日は何かを学んだような気がします。
-編集-
OPの提案によると、上記で参照した同じスレッドごとに、パラメーターを再配置する必要性を防ぐことができる別の修正があります。私の推測では、これは複数のLOBを更新する場合にも役立つ可能性があります。
BindByName
の切り替え プロパティも問題を解決しているようです:
cmd.BindByName = true;