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

新增,修改,刪除出現並行違規的問題!!!答得好有高分!!
小弟我現在遇到並行違規,很苦悶
class dataClass
  {
  comm c = new comm();
  public SqlDataAdapter da;
  public DataSet myset = new DataSet();
  public DataSet show(string sql,string tablename)
  {
  myset.Clear();
  try
  {
  c.Connection();
  da = new SqlDataAdapter(sql, c.constring);
  SqlCommandBuilder bu = new SqlCommandBuilder(da);
  da.Fill(myset,tablename);
  return myset;
  }
  catch (Exception ex)
  {
  throw ex;
  }
  finally
  {
  c.sqlConn.Close();
  }
  }
  }
然後調用類直接更新數據
  dataClass data = new dataClass();
  DataSet ds = new DataSet();
  load事件
  {
  string tablename = "製造明細表";
  ds = data.show("select * from "+tablename,tablename);
  }
然後直接更新 data.da.Update(ds, ds.Tables[0].TableName);




------解决方案--------------------
从报错信息来看你的update是执行了的 说明SqlCommandBuilder的使用没有问题

那么接下来 就看你这些做新增、修改、删除的操作代码了
------解决方案--------------------
谈不上……

只是不知道业务逻辑

例如 可否只有一个leader的角色可以修改和删除数据

一般业务人员只能浏览

同时多人访问和操作一个表 按你目前的逻辑势必会造成数据源的不一致。

或者你也像源代码管理器一样 有签出功能……

有锁的概念

再或者 是否可以将数据拆分成具体的工作项 每个业务人员只能看到属于自己的数据,并对其进行操作。

这些还是需要具体情况来具体分析


------解决方案--------------------
可以在原数据表中添加一个字段,每进行一步数据操作,都对此字段进行修改,可以是自动加1的int型,你从数据库中获取数据时,将此字段取出放到一个变量中,如果你在操作删除修改等动作时,再次从数据库中提取,如果此时此字段与你开始提取的字段值不相等,就说明数据库的数据已被修改!可以按你自己的意愿来进行操作,重新提取或是覆盖!
只供参考!