前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法

违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法

作者头像
跟着阿笨一起玩NET
发布2018-09-18 16:14:46
4.3K0
发布2018-09-18 16:14:46
举报

本文转载: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;

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

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

状态

说明

Continue

继续执行更新操作。

ErrorsOccurred

中止更新操作并引发异常。

SkipCurrentRow

忽略当前行并继续执行更新操作。

SkipAllRemainingRows

中止更新操作但不引发异常。

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

代码语言:javascript
复制
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;
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-06-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档