+ -
当前位置:首页 → 问答吧 → 微软企业库删除效率问题

微软企业库删除效率问题

时间:2011-12-20

来源:互联网

方法一
DataTable dt = silkPlanDataset.MT_PL_ZS_TASK_DEL.GetChanges(DataRowState.Deleted);
  if (dt != null)
  {
  //dt.RejectChanges();
  DateTime dtime1 = DateTime.Now;
  DataColumn[] keys = new DataColumn[1];
  keys[0] = dt.Columns["ZS_TASK_DEL_ID"];
  dt.PrimaryKey = keys; //指定主键
  tran = conn.BeginTransaction();
  sql = "delete from MT_PL_ZS_TASK_DEL where ZS_TASK_DEL_ID =:ZS_TASK_DEL_ID";
  command = db.GetSqlStringCommand(sql);
  db.AddInParameter(command, "ZS_TASK_DEL_ID", DbType.String, "ZS_TASK_DEL_ID", DataRowVersion.Current);
  DataSet ds = new DataSet();
  ds.Tables.Add(dt);
  db.UpdateDataSet(ds, "MT_PL_ZS_TASK_DEL", null, null, command, tran);
  tran.Commit();
  DateTime dtime2 = DateTime.Now;
  TimeSpan tp = dtime2 - dtime1;
}
方法二
DataTable dt = silkPlanDataset.MT_PL_ZS_TASK_DEL.GetChanges(DataRowState.Deleted);
  if (dt != null)
  {
  //dt.RejectChanges();
  DateTime dtime1 = DateTime.Now;
  DataColumn[] keys = new DataColumn[1];
  keys[0] = dt.Columns["ZS_TASK_DEL_ID"];
  dt.PrimaryKey = keys; //指定主键
  tran = conn.BeginTransaction();
  sql = "delete from MT_PL_ZS_TASK_DEL where rowid =(select rowid from MT_PL_ZS_TASK_DEL where ZS_TASK_DEL_ID = :ZS_TASK_DEL_ID)";
  command = db.GetSqlStringCommand(sql);
  db.AddInParameter(command, "ZS_TASK_DEL_ID", DbType.String, "ZS_TASK_DEL_ID", DataRowVersion.Current);
  DataSet ds = new DataSet();
  ds.Tables.Add(dt);
  db.UpdateDataSet(ds, "MT_PL_ZS_TASK_DEL", null, null, command, tran);
  tran.Commit();
  DateTime dtime2 = DateTime.Now;
  TimeSpan tp = dtime2 - dtime1;
}

采用企业库删除的时候,一次删除200条记录,方法二效率更高,为什么?
方法二是先查找了rowid 然后再删除.

作者: sk9979   发布时间: 2011-12-20

和企业库有关系么?

作者: Sandy945   发布时间: 2011-12-20

rowid 具体的物理位置

如果用的是条件查询则要根据一定过虑找到记录

而rowid可直接指定物理位置当然快

作者: ajaxtop   发布时间: 2011-12-20

问题是采用rowid删除的时候,也是根据条件过滤到指定记录,然后才能取得rowid进行删除

作者: sk9979   发布时间: 2011-12-21

微软企业库的数据集更新真垃圾,还不如自己组织sql,执行效率高,用数据集删除
方法1 200条记录 需要23秒
方法2 200条记录 需要17秒
方法3 自己组织删除语句,逐条删除,一次提交只要 0.5秒

作者: sk9979   发布时间: 2011-12-22

你告诉它一个DataSet ,它要去遍历之后才能生成改动的SQL

作者: Sandy945   发布时间: 2011-12-22

相关阅读 更多