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;
}
当我读到你的帖子时,我真的觉得你在胡思乱想。出于好奇,我试了一下,惊讶于这个错误真的发生了。
有个好消息。我到处找了找,发现了这个:
如何使用>>准备好的查询<<使用ODP(oracle.dataaccess)更新CLOB字段中的数据?
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;
}
--编辑--
根据OP的建议,有另一个修复,根据上面提到的同一线程,可以防止重新排列参数的必要性。我猜想,如果您正在更新多个LOB,这可能也会派上用场。
切换bindbyname
属性似乎也可以解决此问题:
cmd.BindByName = true;
问题内容: 我有一个带有单个主键的表。当我尝试执行插入操作时,尝试插入具有现有键的行可能会导致冲突。我要允许插入更新所有列吗?有什么简单的语法吗?我试图让它“ upsert”所有列。 我正在使用PostgreSQL 9.5.5。 问题答案: 该语法 要求 显式命名目标列。避免这种情况的可能原因: 您有很多列,只是想缩短语法。 除了唯一列,您不 知道 列名。 必须以匹配顺序和匹配数据类型表示 “目标
我使用的是oracle数据库10g速成版。最近我经常面临ORA-12516错误。它说--“java.sql.sqlException:Listener拒绝连接,出现以下错误:ORA-12516,TNS:Listener无法找到具有匹配协议栈的可用处理程序。客户端使用的连接描述符是://127.0.0.1:1521/xe”
我有一个只有一个主键的表。当我试图插入时,可能会因为试图用现有键插入一行而引起冲突。我想允许插入更新所有列?有什么简单的语法吗?我试图让它“向上插入”所有列。 我使用PostgreSQL 9.5.5。
有时代号为One的团队表示修复将在几周内到来,而其他时候他们表示已经修复。这种不透明性显然与云服务器的更新有关,但我不清楚是否只是云服务器&插件,还是我遗漏了什么。为什么没有一个单独的更新过程? 我真的想要一个更明确的答案,比如代号一是如何工作的?为了这个。
我在迁移(模式)和模型中添加了时间戳 我创建了一个包含数据库所有字段的数组,并将其插入到数据库中。 在表中,它更新除updated_at、created_at时间戳之外的所有字段 我有另一个(默认)用户模型,它更新时间戳。在那个模型中,我使用-
我做了一些研究,有一个建议可以使用双重 但是现在我得到了ORA-06502/ORA-06512错误: ORA-06502:PL/SQL:erreur numérique ou erreur sur une valeur ORA-06512:àsys.xmltype“,ligne 272 ORA-06512:àligne 1 06502。00000-“PL/SQL:数值或值错误%s” *原因:出现算