zoukankan      html  css  js  c++  java
  • 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法

    本文转载:http://www.cnblogs.com/litianfei/archive/2007/08/16/858866.html

    UpdateCommand和DeleteCommand出现DBConcurrencyException异常。调试提示:违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条;或   违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条。

    这里的违反并发性:不是指多人编辑引起的并发。

    问题原因:

    在插入、更新或删除操作过程中当受影响的行数等于零时由 DataAdapter 引发的异常。

    可能的解决方法:

    1 检查是否设有主键。

    2 DeleteCommand的问题:检查是否含有自动编号字段(Access的自动编号字段可能会引发此异常);

       UpdateCommand的问题:检查更新的字段的原始值是否为空值(原始空值更新时可能会引发此异常)。
    3、多人并行操作也可能引发这样的异常。
    ----------------------
    如果你采用了BindingSource和TableAdapter的话,请参考下面的代码:

    -----------------------------------------------------------------------------------

    例程来源:人民邮电出版社出版的书《Visual Basic .NET 2005数据库编程技术与实例》

    详情请见:http://www.ptpress.com.cn/books/Book_Information.asp?BID=16271

    -----------------------------------------------------------------------------------

    Me.Validate()

    Me.职工基本信息BindingSource.EndEdit()

    Me.职工基本信息TableAdapter.Update(Me.工资管理DataSet.职工基本信息.GetChanges)

    Me.工资管理DataSet.职工基本信息.AcceptChanges()
    但是这样做后,导致了,dataset和数据库不一致的问题。是.AcceptChanges()
    语句导致。
    ----------------------
    也反应这样处理:http://software.it168.com/manual/ado.net/4-2-g.htm

    ?

    应该在RowUpdating事件里面处理一下,如果有并发行出现,就跳过 e.Status = UpdateStatus.Continue;

    状态 说明
    Continue 继续执行更新操作。
    ErrorsOccurred 中止更新操作并引发异常。
    SkipCurrentRow 忽略当前行并继续执行更新操作。
    SkipAllRemainingRows 中止更新操作但不引发异常。


    我们建议目前这样处理:
    if(this.工资管理DataSet.职工基本信息.GetChanges!=null)
    {Me.职工基本信息TableAdapter.Update(Me.工资管理DataSet.职工基本信息.GetChanges)}

     private void Form1_Load(object sender, EventArgs e)
            {
                string conn = "Data Source=.;Initial Catalog=TestDB;Integrated Security = SSPI;";
                using (SqlConnection connection = new SqlConnection(conn))
                {
                    connection.Open();
                    string select = "SELECT * FROM Table_1";
                    SqlDataAdapter da = new SqlDataAdapter(select, connection);
                    da.RowUpdating += new SqlRowUpdatingEventHandler(da_RowUpdating);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    DataTable dataTable = ds.Tables[0];

                    dataTable.Rows[0][1] = "9999";
                    // 删除第8行
                    
    //dataTable.Rows[1].Delete();

                    SqlCommand cmd = new SqlCommand();
                    SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(da);
                    cmd=objCommandBuilder.GetDeleteCommand();
                    da.Update(dataTable);
                    //if (dataTable.GetChanges() != null)
                    
    //{
                    
    //    da.Update(dataTable.GetChanges());
                    
    //}

                    
    //dataTable.AcceptChanges();

                    this.dataGridView1.DataSource = dataTable;

                }
            }

            void da_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
            {
                e.Status = UpdateStatus.Continue;
            }

             

  • 相关阅读:
    设计模式复习-简单工厂模式
    神经网络与机器学习 笔记—基本知识点(上)
    声明:songzijian这个域名已经被抢注。大家别上了。不是我了。
    《NO STRATEGY》《重塑战略》
    《THE LEAN STARTUP》 《精益创业》
    逆向与分析-WebBrowserPassView消息分析
    HTTP1.0,1.1,2.0,HTTPS
    Linux-鸟菜-7-Linux文件系统-EXT
    Linux-鸟菜-6-文件搜索
    反弹代理环境的搭建
  • 原文地址:https://www.cnblogs.com/51net/p/3149793.html
Copyright © 2011-2022 走看看