我無法更新BLOB字段,但插入工作,請參閱下面的代碼。如何更新BLOB列,錯誤ORA-00932,而插入工作
我的猜測是,它是與存儲大量記錄一個BLOB值,涉及複製大數據的問題。
在我的情況,我知道只有一條記錄將被更新,但甲骨文可能是潛在的一些記錄可能需要更新的意見。使用插入,保證只涉及1條記錄,但並不總是更新。現在我該如何解決這個問題?
NB:在WHERE子句在artnr物品字段是具有一個唯一索引的主鍵。
順便說一句,我覺得worrysome,現在有很多的用於插入BLOB在互聯網上的代碼示例,但我無法找到一個用於更新BLOB。
using Oracle.DataAccess.Client;//needs reference to Oracle.DataAccess.dll
using Oracle.DataAccess.Types; //OracleBlob
public static bool StoreBlobImage(OracleConnection conn, string ArtNr, byte[] bImageJpg)
{
bool Ok = false;
#if true // this is what I need, but does not work
string Sql = "update MyTable set Image = :Image where ArtNr = :ArtNr";
#else // this works
string Sql = "insert into MyTable (ArtNr, Image) values (:ArtNr, :Image)";
#endif
using (OracleCommand cmd = new OracleCommand(Sql, conn))
{
//cmd.Connection = conn;
//cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("ArtNr", OracleDbType.Varchar2, 8).Value = ArtNr;
#if false // tried method 1
cmd.Parameters.Add("Image", OracleDbType.Blob).Value = bImageJpg;
#else // now trying method 2
OracleParameter blobParameter = new OracleParameter();
blobParameter.OracleDbType = OracleDbType.Blob;
blobParameter.ParameterName = "Image";
blobParameter.Value = bImageJpg;
blobParameter.Direction = ParameterDirection.Input;
blobParameter.IsNullable = true;
cmd.Parameters.Add(blobParameter);
#endif
try
{
conn.Open();
cmd.ExecuteNonQuery(); // ORA-00932: inconsistent datatypes: expected - got BLOB
}
catch (Exception TheException)
{
}// debug breakpoint
}
return Ok;
}
任何要傳遞'ArtNr'as BLOB機會呢? [This](http://stackoverflow.com/questions/12980038/ora-00932-inconsistent-datatypes-expected-got-clob)將解釋ORA-00932。 –
@MarmiteBomber感謝您的評論,但插入工程,具有相同的參數。 – Roland
好吧,對不起,我只能跟JDBC比較(沒有ODP技能)。希望你可以用下面的答案來解決它。它是有道理的一個長BLOB覆蓋所有以下參數:) –