c# oralce 数组参数批量更新出现 deadlock 错误

tigerhunter83 2012-12-20 09:15:49
我启动了60个线程同时更新一张表,结果提示
Oracle.DataAccess.Client.OracleException ORA-24381: error(s) in array DML

ORA-00060: deadlock detected while waiting for resource。
批量更新还有什么好方法吗?

message = "";
OracleConnection conn = new OracleConnection(_tableCfg.DbService.OracleConnString);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
try
{

//string sql = "update newsadmin.BOND_TD_DANALYSIS_TMP set AIdays = 0 where bondcode = '1080176' and texch = 'CNIBEX' and tdate = date'2012-01-10'";
cmd.CommandText = sqlBulkContent.cmd;
cmd.ArrayBindCount = sqlBulkContent.RowCount;
foreach (FieldCfg fieldCfg in _tableCfg.FieldCfgs)
{
string key = fieldCfg.TargetItem;
OracleParameter param = new OracleParameter(key, sqlBulkContent.paramTypeDict[key]);
param.Direction = ParameterDirection.Input;
param.Value = sqlBulkContent.paramDict[key].ToArray();
cmd.Parameters.Add(param);
}
cmd.ExecuteNonQuery();

}
catch (Exception ex)
{
message = ex.ToString();
}
finally
{
conn.Close();
}
return sqlBulkContent.RowCount;
...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tigerhunter83 2012-12-20
  • 打赏
  • 举报
回复
我原来用单个语句更新数据表,多线程更新时并没有死锁。为什么用了批量更新就死锁了呢?
tigerhunter83 2012-12-20
  • 打赏
  • 举报
回复
新发现一个问题,就是在更新时,需要将一些列更新为空值,但在object[] 中填入空字符串,报错。所以现在是填入null,可能这样的语句就不能执行了,所以报错。
瑞卡哥哥 2012-12-20
  • 打赏
  • 举报
回复
在更新时 先给表加锁! 更新完了 就解锁!

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧