各位大哥,小弟有个问题想请教一下:
我在程序中使用DataGrid更新数据库,开始对一个字段(比如说“业务员”在DataGrid里面是个下拉框)进行修改操作,开始几次还可以,可是等我的操作频繁,数据更新加快的时候,就出现了并发冲突!请问我这个是什么情况? 我的程序是单机版的,而且就我一个用户在操作!
这个是我提交到数据库的函数this.MyLink.UpDataDataBase(MySet.GetChanges(),SendTableName);
MyLink  是我写的操作数据库类的对象的实例化!调用的函数是:
public DataSet UpDataDataBase(DataSet ChangedDataSet,string TableName)
{
this.MyCon = new SqlConnection(this.ConStr);
this.da = new SqlDataAdapter(this.StrSql,this.MyCon);
this.MyBuilder = new SqlCommandBuilder(da);
this.da.Update(ChangedDataSet,TableName);

//返回更新了的数据库表
return ChangedDataSet;
    }小弟先谢谢 大家了

解决方案 »

  1.   

    WinForm加个刷新按钮。。并发之后刷新?请问怎么刷啊?
      

  2.   

    winform?用到多线程?如果是的话,在更新的时候加上互斥标识,
    例如:
    public DataSet UpDataDataBase(DataSet ChangedDataSet,string TableName)
    {
    lock( this )
    {
    this.MyCon = new SqlConnection(this.ConStr);
    this.da = new SqlDataAdapter(this.StrSql,this.MyCon);
    this.MyBuilder = new SqlCommandBuilder(da);
    this.da.Update(ChangedDataSet,TableName);
    }
    //返回更新了的数据库表
    return ChangedDataSet;
    }
      

  3.   

    Knight94 我刚按照你的方法改正了,可还是不对啊还是出现并发冲突
      

  4.   

    你可以判断MyCon 的连接状态,如果已经是连接的话,就不要在open了
      

  5.   

    to 我刚按照你的方法改正了,可还是不对啊还是出现并发冲突那么,唯一有问题就是DataSet.GetChanges传递的问题你最好说说你先在程序的架构,是否使用了多线程。
      

  6.   

    恩,没有使用多线程啊就是DataGrid指定数据源DataSet.Table[0],刚开始还可以修改数据库中的记录,可是修改几次后 就出现了并发冲突,数据库表中没有自增的列
      

  7.   

    注意Sql语句的执行顺序,
    建议 不要试图通过SqlCommandBuilder来偷懒处理复杂的更新逻辑,以自定义sql语句代替,代码例子参考,
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67016.aspx
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
      

  8.   

    to 恩 。。怎么样屏蔽啊???例如,用button进行提交更新操作,那么当提交的时候,修改button的Enabled属性为false,防止重复点击,然后更新操作完成后进行恢复属性为true。
      

  9.   

    to 我用c#操作数据库两张表的时候,生成一个子窗体很慢,几乎要等好久才出来,不知道大家碰见过这样的问题没有?你如何操作的。