database - 并发冲突 : the UpdateCommand affected 0 of the expected 1 records

标签 database vb.net concurrency

我在 Visual Basic Express Edition (winforms) 中设置了一个简单的 mdb 数据库,我正在尝试将数据从 datagridview 更新到数据库。我已经将文本框数据绑定(bind)到 datagridview 中我想要的列,这很好用。

经过一番努力,我终于设法更新了数据库每一行的值。但是,尝试修改新创建的记录会引发此错误:“并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条”

我的意思是,似乎错误只发生在新创建的行上。因为关闭应用程序并立即重新打开它,所以我可以更新单元格的值。 我还注意到,当我刚刚创建一个新行时,该行的 ID 设置为“-1”。其他行的 ID 没有负数。这可能是原因吗?似乎该行并未真正更新到数据库中。

这是 AddRow 按钮的代码

Dim newRow As MusicDBDataSet.SongsRow
        newRow = MusicDBDataSet.Songs.NewSongsRow()
        newRow.Name = txtBoxNewName.Text
        newRow.Genre = txtBoxNewGenre.Text
        newRow.Rhytm = txtBoxNewRhytm.Text
        newRow.Length = txtBoxNewLength.Text
        MusicDBDataSet.Songs.Rows.Add(newRow)

        Try
            Me.Validate()
            Me.SongsTableAdapter.Update(Me.MusicDBDataSet.Songs)
            Me.SongsBindingSource.EndEdit()
            Me.MusicDBDataSet.Songs.AcceptChanges()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

这会将我放入文本框中的数据填充到 DataGridView 的新行中。 一切看起来都很好(除了 ID 列的 -1 值)

数据绑定(bind)到数据库的文本框,这些是我用来尝试更新单元格值的文本框。 代码如下所示:

Try
    Me.Validate()
    Me.SongsBindingSource.EndEdit()
    Me.SongsTableAdapter.Update(Me.MusicDBDataSet.Songs)
    Me.MusicDBDataSet.Songs.AcceptChanges()

Catch ex As Exception
    MsgBox(ex.Message)
End Try

现在,我完全不确定这是否是正确的做法。 但是仔细想想,用于更新新创建行的值的文本框是数据绑定(bind)到数据库或表适配器本身的,对吧?会不会是 UpdateCommand 失败了,因为还没有真正正确地创建该行?

最佳答案

我是这样解决的:

修改数据表后执行以下步骤。

dataTable = dataTable.GetChanges()

关于database - 并发冲突 : the UpdateCommand affected 0 of the expected 1 records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1248537/

相关文章:

java - 使用 java.util.concurrent.locks.Lock 而不是同步的 : can my code avoid dead-lock in a bank transfer scenario?

c# - Java中任务并行库的等价物

database - 在子查询中获取 Id

SQL查询根据同一表中其他列的值从表中提取日期?

c# - 为 Visual Studio 安装项目创建自定义开始菜单快捷方式链接

vb.net - 使用 winforms .net 6 vb.net 任务栏图标上的进度条

database - 在 SQLite 中读取固定宽度的列是否更快?

mysql - 针对架构不断变化的大型数据库的策略

asp.net - Gridview 在列标题中排序向上/向下箭头

java - 具有条目驱逐的并发阻塞映射