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

违反并发性: 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;

因参数顺序不对,产生这么个原因 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: datagrid1.updatecommand是一个用于更新数据表数据的命令。它可以在数据表更新指定的行和列的数据,并将更新后的数据保存到数据库。在使用该命令时,需要指定要更新的数据表、更新的列和行以及更新后的值。 ### 回答2: datagrid1.updatecommand是.NET Framework的一个命令属,适用于ASP.NET Web应用程序开发。它可以用于更新数据源的一个或多个记录。 首先,在使用datagrid1.updatecommand之前,我们需要先确定需要更新的记录和所需更新的新值。对于需要更新的记录,常见的方法是使用where子句,它可以根据关键词或件语句进行筛选。对于所需更新的新值,我们可以将其作为参数传递给updatecommand。 在定义了需要更新的记录和更新的新值后,我们可以使用以下步骤设置datagrid1.updatecommand: 1.将查询字符串编写为文本字符串。 2.使用Command对象创建OleDbCommand对象。 3. 使用DataAdapter对象的UpdateCommand将OleDbCommand对象分配给。 例如,以下是使用datagrid1.updatecommand更新记录的示例: string updateString = "UPDATE Customers SET ContactName = ?, City = ? " + "WHERE CustomerID = ?"; // 创建OleDbCommand对象 OleDbCommand updateCommand = new OleDbCommand(updateString, connection); updateCommand.Parameters.Add("@ContactName", OleDbType.VarChar, 30, "ContactName"); updateCommand.Parameters.Add("@City", OleDbType.VarChar, 15, "City"); updateCommand.Parameters.Add("@CustomerID", OleDbType.VarChar, 5, "CustomerID"); dataAdapter.UpdateCommand = updateCommand; 这段代码将使用明确的查询字符串更新Customers表记录,并分配一个OleDbCommand对象给DataAdapter对象的UpdateCommand。该OleDbCommand对象带有3个参数,用于设置所需更新的字段和件。 总之,datagrid1.updatecommand是一个帮助开发人员在ASP.NET应用程序更新数据源表的记录的属。使用它可以方便地更新记录,提高程序的开发效率。 ### 回答3: datagrid1.updatecommand是一个在ASP.NET使用的命令对象,用于更新数据库的数据。当用户在datagrid上进行修改操作时,根据设置的updatecommand,datagrid就会将所修改的数据传到updatecommand所在的SQL语句进行更新。 在使用datagrid1.updatecommand时,需要注意以下几点: 1.确保updatecommand所在的SQL语句能够正确地更新数据库的数据,并且经过充分的测试确保其正常运行。 2.在datagrid1的bind方法设置updatecommand的值,并且将datagrid1的数据绑定到数据库的数据表。 3.在datagrid1的rowupdating事件使用updatecommand来更新数据库的数据。 4.确保所使用的updatecommand的参数与datagrid所修改的数据的字段对应,否则更新操作可能出现错误。 总的来说,datagrid1.updatecommand是一个非常有用的工具,能够帮助开发人员快速地更新数据库的数据,减少了手动编写SQL语句的工作量,同时也提高了数据更新的效率和准确。但是,需要注意使用updatecommand时的一些细节问题,以确保其正常运行并避免出现错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值