如我通过select a,count(*) from 表1 where a='1' group by a 语句查询出来显示在datagrid控件上。后续我通过foreach (datagridviewrow row in datagridview1.rows)
         {         }
做一些操作。那如何保证其它人查询不到或者在做后续操作时提示已经被更新等。目前想到的是做标记感觉也不太可靠,不知道各位有什么好的方法。

解决方案 »

  1.   

    这样的问题有标准的做法,请勿自行山寨http://blog.sina.com.cn/s/blog_4c8a4e5901000btu.html
      

  2.   

    楼上的我看了,想用乐观锁,我先把首次查询出来的数据放在数据集中,在要更新时去判断ID和时间戳是否有被更新过,但这样一行一行去查是不是效率太低了,一行是很快的,但一下子有几百行的时候好慢啊,不知道是不是我的方法不对
     //如果数据没有被更新过返回真,否则返回假
            private bool ifupdate(string t_inv,string t_dj,string t_vbat)
            {
                DataRow[] dr = olddate.Tables[0].Select("trim(invcode)='" + t_inv.Trim() + "' and trim(jl)='" + t_dj.Trim() + "' and trim(bpvbat)='" + t_vbat.Trim() + "'");
                if (dr.Length > 0)
                {
                    for (int i = 0; i < dr.Length; i++)
                    {
                        if (UseDataLayer.GetDataTable("select 1 from test_jia where trim(jlh)='" + dr[i]["jlh"].ToString().Trim() + "' and trim(timestamp)='" + dr[i]["timestamp"].ToString().Trim() + "'").Rows.Count == 0)
                        {
                            //MessageBox.Show("数据被更新请重新查询后再提交!", "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return false;
                        }
                    }
                }
                return true;
            }