批量插入数据很慢,大家帮忙看看什么原因

aoyouke 2010-08-02 10:26:12
采用的petshop 4里面的 oraclehelper,看着例子 写的下面的语句,速度很慢,其实数据量不大,items大概就1W条左右,需要5分钟左右?是不是我方法写的不当?

如有更好的方法,请指出谢谢!





public void UpdateBinFromList(IList<ItemInfo> items)
{
//插入数量
int itemsCount = items.Count;

if (itemsCount <= 0)
{
MessageBox.Show("没有数据");
return;
}
string SQL_UPDATE_depotitem = "INSERT INTO item (wh, zone, bin, num, style) VALUES(:WH,:ZONE,:BIN,0,:STYLE)";

OracleParameter[] parms =
{
new OracleParameter(":WH",OracleType.VarChar,6),
new OracleParameter(":ZONE",OracleType.VarChar,10),
new OracleParameter(":BIN",OracleType.VarChar,5),
new OracleParameter(":STYLE",OracleType.VarChar,20)
};

OracleConnection conn = new OracleConnection(OracleHelper.connectionString);
conn.Open();
OracleTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
int i = 0;

foreach (ItemInfo var in items)
{
parms[0].Value = var.Ware;
parms[1].Value = var.Zone;
parms[2].Value = string.IsNullOrEmpty(var.Bin) ? "" : var.Bin ;
parms[3].Value = var.Style;


i= i+ OracleHelper.ExecuteNonQuery(trans, CommandType.Text, SQL_UPDATE_depotitem, parms);
System.Diagnostics.Debug.WriteLine("插入数: " + i.ToString() + " " + var.Ware + "|" + var.Zone + "|" + var.Bin + "|" + var.Style);


}

trans.Commit();
//System.Diagnostics.Debug.WriteLine(i.ToString());

}
catch (Exception)
{
trans.Rollback();
throw;
}
finally
{
conn.Close();
}


}
...全文
260 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
viki117 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 libinlink 的回复:]
把insert into 。。。values。。。


改为insert into 。。。
select 。。。nuion。。。
[/Quote]
这招还真没有试过,如果数据不在数据库里,而是外部来的,我不觉得你可以一次搞定..

数据多慢是正常的,加上还有事务,更慢了

这种情况试下2楼的方法,或者尝试存储过程
libinlink 2010-08-02
  • 打赏
  • 举报
回复
笔误,应该为 union
libinlink 2010-08-02
  • 打赏
  • 举报
回复
也就是说把一万次插入。变为一次。呵呵
libinlink 2010-08-02
  • 打赏
  • 举报
回复
把insert into 。。。values。。。


改为insert into 。。。
select 。。。nuion。。。
wheeler 2010-08-02
  • 打赏
  • 举报
回复
能快才怪,1万多条
ADO.NET自带的,用的是很方便,但是会产生额外的数据库往返行程。

此处场景,字符串拼接的效果可能都要优于 ADO.NET自带的事务处理。
wuyq11 2010-08-02
  • 打赏
  • 举报
回复
分步提交,比如每导入1000行commit

110,561

社区成员

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

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

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