【发布时间】:2009-07-23 14:58:49
【问题描述】:
我在进行 Oracle 更新时遇到问题。对 ExecuteNonQuery 的调用无限期挂起。
代码:
using (OracleCommand cmd = new OracleCommand(dbData.SqlCommandStr, conn))
{
foreach (string colName in dbData.Values.Keys)
cmd.Parameters.Add(colName, dbData.Values[colName]);
cmd.CommandTimeout = txTimeout;
int nRowsAffected = cmd.ExecuteNonQuery();
}
CommandTimeout 设置为 5,参数设置为小整数值。
查询:
UPDATE "BEN"."TABLE03" SET "COLUMN03"=:1,"COLUMN04"=:2 WHERE COLUMN05 > 0
查询从 sqlplus 快速运行,通常从我的代码运行快速,但每隔一段时间它就会永远挂起。
我在 v$locked_object 上运行了一个查询,并且有一条记录引用了这个表,但我认为那是没有完成的更新。
有两件事我想知道:什么可能导致更新挂起?
更重要的是,为什么这里没有抛出异常?我希望呼叫等待五秒钟,然后超时。
【问题讨论】:
-
什么版本的Oracle?你能运行这个查询吗:“select * from v$version”并复制出第 1 行。它应该类似于:“Oracle Database 10g Release 10.2.0.4.0 - Production”。另外,这是一个真正的表还是一个视图而不是触发器?它有任何之前/之后的触发器吗?