违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条
2007-11-05 08:46
453 查看
违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 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()
语句导致。
----------------------
也反应这样处理:
?
应该在RowUpdating事件里面处理一下,如果有并发行出现,就跳过
我们建议目前这样处理:
if(this.工资管理DataSet.职工基本信息.GetChanges!=null)
{Me.职工基本信息TableAdapter.Update(Me.工资管理DataSet.职工基本信息.GetChanges)}
*****************************************************************************************************************************
我的例子:
string str3 = "update ProductType set Brother2=@brother2,Child_Num=@num,Brother1=@brother1 where Type_ID=@id";
sda.UpdateCommand = new OleDbCommand(str3, objcon);
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@brother2", OleDbType.Integer));
op.SourceColumn = "Brother2";
op.SourceVersion = DataRowVersion.Current;
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@num", OleDbType.Integer));
op.SourceColumn = "Child_Num";
op.SourceVersion = DataRowVersion.Current;
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@brother1", OleDbType.Integer));
op.SourceColumn = "Brother1";
op.SourceVersion = DataRowVersion.Current;
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer));
op.SourceColumn = "Type_ID";
op.SourceVersion = DataRowVersion.Current;
因参数顺序不对,产生这么个原因
这里的违反并发性:不是指多人编辑引起的并发。
问题原因:
一、参数添加顺序不对
二、在插入、更新或删除操作过程中当受影响的行数等于零时由 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()
语句导致。
----------------------
也反应这样处理:
?
应该在RowUpdating事件里面处理一下,如果有并发行出现,就跳过
我们建议目前这样处理:
if(this.工资管理DataSet.职工基本信息.GetChanges!=null)
{Me.职工基本信息TableAdapter.Update(Me.工资管理DataSet.职工基本信息.GetChanges)}
*****************************************************************************************************************************
我的例子:
string str3 = "update ProductType set Brother2=@brother2,Child_Num=@num,Brother1=@brother1 where Type_ID=@id";
sda.UpdateCommand = new OleDbCommand(str3, objcon);
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@brother2", OleDbType.Integer));
op.SourceColumn = "Brother2";
op.SourceVersion = DataRowVersion.Current;
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@num", OleDbType.Integer));
op.SourceColumn = "Child_Num";
op.SourceVersion = DataRowVersion.Current;
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@brother1", OleDbType.Integer));
op.SourceColumn = "Brother1";
op.SourceVersion = DataRowVersion.Current;
op = sda.UpdateCommand.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer));
op.SourceColumn = "Type_ID";
op.SourceVersion = DataRowVersion.Current;
因参数顺序不对,产生这么个原因
相关文章推荐
- 关于“违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条”的数据库更新错误
- 违反并发性: UpdateCommand 影响了预期1条记录中的0条
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条
- 违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。(非多人同时操作引起)
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
- (违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条 )的原因
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条
- 使用NdbUnit更新数据报“违反并发性 updatecommand 影响了预期 1 条记录中的 0 条”错误的原因
- 提示:违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 重写后解决
- 违反并发性: UpdateCommand影响了预期 1 条记录中的 0
- 违反并发性: UpdateCommand 影响了预期1条记录中的0条——我的解决方案
- 违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。
- 违反并发性 deletecommand影响了预期1条记录中的0条
- 解决问题:Concurrency violation: the UpdateCommand affected 0 of the expected 1 records(UpdateCommand 影响了预期1 条记录中的0 条 )
- 关于ADO.Net使用TableAdapter时产生:更新要求有效的deletecommand或update,insert,selectcommand的解决办法,以及“违反并发性”处理
- 并发冲突: UpdateCommand 影响 0 个记录。
- 关于:Update后引发 并发冲突:DeleteCommand 影响 0 个记录 的错误