日期:2014-05-18  浏览次数:21030 次

.net 高手务必请进!超级怪异的问题!折磨了我几天了
问题描述:datagridview绑定了一个临时表,批量增加后保存后,记录当然保存在临时表里,然后后台代码把临时表里记录复制到正式表里. 
异常的表现:批量保存后,临时表里记录正确,但是复制到正式表里后,少了一条,如果增加是只增加一条,则复制不到正式表里.
更异常的表现:如果在保存的方法上设置断点,执行后,结果正确,反之,直接执行后,没有复制到正式表里
代码如下,请高手指教
 //批量保存datagridview
  private void btnSave_Click(object sender, EventArgs e)
  {
  if (oda != null)
  {
  OleDbCommandBuilder odcb = new OleDbCommandBuilder(oda);
  OleDbCommand objSc = odcb.GetUpdateCommand();
  oda.UpdateCommand = objSc;
  oda.Update((DataTable)dataGridView1.DataSource);
  oda.Dispose();

  try
  {  
  //更新临时表到表中
  string updtemoToTabstr = "insert into sufferertab select * from sufferertab_temp where sufferername is not null ";
  publicOldDB.excuteSql(updtemoToTabstr);

  //string deltemp = "delete * from sufferertab_temp";
  //publicOldDB.excuteSql(deltemp);
  MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK);
  this.comboxitem.Enabled = true;
  }
  catch
  {
  MessageBox.Show("保存失败!", "提示", MessageBoxButtons.OK);
  }

  }
  else
  {
  MessageBox.Show("没有要保存的数据!", "警告", MessageBoxButtons.OK);
  }
  }

------解决方案--------------------
最好查查你的游标位置。。。。
------解决方案--------------------
探讨
问题补充:怪异的是如果断点执行,一步一步执行,就可以把临时表里的记录全部复制到正式表,直接执行中是少一行

------解决方案--------------------
用休息2秒的方法不错,
或者自己加判断

因为是调试,所以执行起来慢,代码加载等一些 因素就全部加载完成

直接运行,速度太快,导致上面代码没加载完就走下面的代码了

你这个情况 根javascript 的一样,,

上次我也有这个情况,不过后来解决了,,加了判断
------解决方案--------------------
猜测:...(仅仅猜测):
1. 数据库更新操作和datagridview的绑定操作都是需要时间的,这些时间差也许就是导致你在插入正式表里的数据有错误;
2. 数据在debug的时候能完全插入正式表,在直接运行的时候不行,说明在直接运行的时候有可能有什么语句没直接,或者是循环的条件不正确(具体的也不清楚).
3. 这种情况我也曾遇到过,当时也无法解决,鼓捣了很久,最后还是来了个sheep()直接了事.

希望高手继续给解释哈.