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

简介: 本文转载:http://www.cnblogs.com/litianfei/archive/2007/08/16/858866.html UpdateCommand和DeleteCommand出现DBConcurrencyException异常。

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

 

         

 

目录
相关文章
|
3月前
|
测试技术
如何避免测试同化现象?
如何避免测试同化现象?
|
7月前
|
JavaScript 安全 前端开发
修改MD5值:降低iOS应用程序关联性判定,减少拒绝风险
ios应用程序存储一些图片,资源,配置信息,甚至敏感数据如用户信息、证书、私钥等。这些数据怎么保护呢?可以使用iOS提供的Keychain来保护敏感数据,也可以使用加密技术,或者使用Ipa Guard 来弱化文件名称含义,增加破解难度。实现保护iOS app应用程序不被反编译、破解或篡改。
|
10月前
|
前端开发 关系型数据库 MySQL
用户重复注册分析-多线程事务中加锁引发的bug
用户重复注册分析-多线程事务中加锁引发的bug
120 0
|
缓存 测试技术 数据库
软件测试面试题:假设在测试过程中某些事务的响应时间过长,但分析应用服务、数据库以及网络都属于正常现象,问题可能出现的原因有哪些?
软件测试面试题:假设在测试过程中某些事务的响应时间过长,但分析应用服务、数据库以及网络都属于正常现象,问题可能出现的原因有哪些?
313 0
|
监控 安全 Java
安全配置错误规避指南
安全配置错误规避指南
229 0
|
算法
建立统计过程中排除异常干扰机制
建立统计过程中排除异常干扰机制
122 0
建立统计过程中排除异常干扰机制
|
设计模式 JavaScript 前端开发
如何优雅的消除系统重复代码
在程序猿的日常工作中,不仅要跟随业务侧的发展不断开发新的需求,同时也需要维护老的已有平台。无论是开发新需求还是维护老系统,我们都会遇到同样一个问题,系统中总是充斥着很多重复的代码。
29468 11
如何优雅的消除系统重复代码
|
监控 关系型数据库 MySQL
如何避免长事务对业务的影响?
大家好前面我们大概了解了关于事务的隔离级别,实现方式,启动方式的细节,长事务与短事务的区别。今天我们延伸介绍一下,如果因为失误用了长事务,那我们在工作中如何发现问题,排查问题?
|
监控 架构师 搜索推荐
在别人写的代码上做修改我是这样保证正确性
在别人写的代码上做修改我是这样保证正确性
在别人写的代码上做修改我是这样保证正确性
|
存储 JSON 监控
3类代码安全风险如何避免?
企业和开发者在解决开源依赖包漏洞问题的同时,还需要考虑如何更全面地保障自己的代码数据安全。那么有哪些代码安全问题值得我们关注呢?
2002 0
3类代码安全风险如何避免?

相关实验场景

更多