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

在access的mdb数据库动态更新的过程中,遇到了DeleteCommand出现DBConcurrencyException异常,错误:违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条。

程序逻辑:遍历表1的所有行,如果符合条件,则删除表1当前行,且删除表2中的相关行(两行),并在表2中插入新的一行。由于在判断的时候需要用到表2中新插入的行,所以得在循环中实时更新。

经查找:

该错误的原因为:数据库的主键设置为-自动编号

错误分析:

首先获取的DeleteCommand和InsertCommand为自动获取,

          OdbcCommandBuilder pCommbui_GD = new OdbcCommandBuilder(adapter_GD);
                adapter_GD.DeleteCommand = pCommbui_GD.GetDeleteCommand();

                OdbcCommandBuilder pCommbui_GX = new OdbcCommandBuilder(adapter_GX);
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ASP.NET ,可以使用 `DetailsView` 控件来显示单个记录的详细信息,并提供编辑和删除记录的功能。要实现 `DetailsView` 的删除功能,需要为 `DeleteCommand` 事件提供处理程序。 以下是一个示例 `DetailsView` 控件,其包含一个删除按钮和 `DeleteCommand` 事件的处理程序: ```aspx <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="ID" DataSourceID="SqlDataSource1"> <Fields> <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> <asp:CommandField ShowDeleteButton="True" /> </Fields> </asp:DetailsView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" DeleteCommand="DELETE FROM [Table] WHERE [ID] = @ID" SelectCommand="SELECT * FROM [Table]"> <DeleteParameters> <asp:Parameter Name="ID" Type="Int32" /> </DeleteParameters> </asp:SqlDataSource> ``` 在上面的示例,`DetailsView` 控件绑定到一个名为 `SqlDataSource1` 的数据源,该数据源指定了 `DeleteCommand` SQL 命令和参数。当用户单击删除按钮时,`DetailsView` 控件将触发 `DeleteCommand` 事件,并将 `ID` 参数传递给 `SqlDataSource1` 数据源。数据源将使用 `DELETE` 命令从数据库删除该记录。 您还可以在 `DeleteCommand` 事件处理程序编写自定义代码来执行删除操作,而不是使用数据源的 SQL 命令。例如,下面是一个示例 `DeleteCommand` 事件处理程序,它使用自定义代码从数据库删除记录: ```csharp protected void DetailsView1_DeleteCommand(object sender, DetailsViewCommandEventArgs e) { int id = Convert.ToInt32(DetailsView1.DataKey.Value); string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand("DELETE FROM [Table] WHERE [ID] = @ID", connection); command.Parameters.AddWithValue("@ID", id); connection.Open(); int rowsAffected = command.ExecuteNonQuery(); connection.Close(); if (rowsAffected > 0) { // Record deleted successfully } else { // Failed to delete record } } } ``` 在上面的示例,`DetailsView1_DeleteCommand` 方法从 `DetailsView1` 控件的 `DataKey` 属获取要删除的记录的 ID,然后使用 ADO.NET 执行 `DELETE` 命令从数据库删除该记录。方法还检查受影响的行数来确定是否成功删除记录,并在必要时提供反馈。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值