VB.NET 数据集显示数据库行不正确

VB.NET dataset displaying database rows incorrectly

我会说我是 VB 的新手,但我已经使用它一年多了,尽管主要用于小任务(主要是与学校相关的)。无论如何,我当前的项目是为了我的 A-Level 任务,我需要能够添加、更新、删除和读取数据库。我当前的代码允许这种情况发生,但在将新记录添加到我的数据库后,VB 中的数据集以不同方式显示行。我有 3 个表:"PlayerInfo"、"PlayerSkill" 和 "PlayerAbilities"。添加新记录时;新的 "PlayerInfo" 信息成为我数据集中的第一行,而 "PlayerSkill" 和 "PlayerAbilities" 成为最后一行。这会导致所有信息无法正确匹配。我想知道是否有其他人遇到过这个问题以及他们是否知道如何解决它。

这显示了要添加到我的数据库中的工作代码。

If inc <> -1 Then
        Dim cb1 As New OleDb.OleDbCommandBuilder(da1)
        Dim cb2 As New OleDb.OleDbCommandBuilder(da2)
        Dim cb3 As New OleDb.OleDbCommandBuilder(da3)
        Dim dsNewRow1 As DataRow
        Dim dsNewRow2 As DataRow
        Dim dsNewRow3 As DataRow
        Try
            dsNewRow1 = ds1.Tables("Players").NewRow()
            dsNewRow1.Item("Forename") = Forename.Text()
            dsNewRow1.Item("Surname") = Surname.Text()
            ds1.Tables("Players").Rows.Add(dsNewRow1)
            da1.Update(ds1, "Players")

            dsNewRow3 = ds3.Tables("Players").NewRow()
            dsNewRow3.Item("Reactions") = Reactions.Text()
            dsNewRow3.Item("Strength") = Strength.Text()
            dsNewRow3.Item("Speed") = Speed.Text()
            dsNewRow3.Item("Stamina") = Stamina.Text()
            dsNewRow3.Item("Accuracy") = Accuracy.Text()
            dsNewRow3.Item("Coordination") = Coordination.Text()
            ds3.Tables("Players").Rows.Add(dsNewRow3)
            da3.Update(ds3, "Players")

            dsNewRow2 = ds2.Tables("Players").NewRow()
            dsNewRow2.Item("RegularShot") = RegularShot.Text()
            dsNewRow2.Item("ShortServe") = ShortServe.Text()
            dsNewRow2.Item("FlickServe") = FlickServe.Text()
            dsNewRow2.Item("Clear") = Clear.Text()
            dsNewRow2.Item("Smash") = Smash.Text()
            dsNewRow2.Item("DropShot") = DropShot.Text()
            ds2.Tables("Players").Rows.Add(dsNewRow2)
            da2.Update(ds2, "Players")

            MsgBox("New Record added to the Database")
            Commit.Enabled = False
            AddNew.Enabled = True
            Update.Enabled = True
            Delete.Enabled = True
        Catch
            MsgBox("Error")
            Me.Close()
        End Try
    End If

这显示了在不同文本框中显示每个数据集记录的代码。

Try
        Forename.Text = ds1.Tables("Players").Rows(inc).Item(1)
        Surname.Text = ds1.Tables("Players").Rows(inc).Item(2)
        Speed.Text = ds3.Tables("Players").Rows(inc).Item(3)
        Strength.Text = ds3.Tables("Players").Rows(inc).Item(2)
        Reactions.Text = ds3.Tables("Players").Rows(inc).Item(1)
        Stamina.Text = ds3.Tables("Players").Rows(inc).Item(4)
        Coordination.Text = ds3.Tables("Players").Rows(inc).Item(6)
        Accuracy.Text = ds3.Tables("Players").Rows(inc).Item(5)
        ShortServe.Text = ds2.Tables("Players").Rows(inc).Item(2)
        FlickServe.Text = ds2.Tables("Players").Rows(inc).Item(3)
        Clear.Text = ds2.Tables("Players").Rows(inc).Item(4)
        Smash.Text = ds2.Tables("Players").Rows(inc).Item(5)
        DropShot.Text = ds2.Tables("Players").Rows(inc).Item(6)
        RegularShot.Text = ds2.Tables("Players").Rows(inc).Item(1)
    Catch
        MsgBox("Error")
        Me.Close()
    End Try

遗憾的是,我目前没有足够的 "Rep" 来上传数据集的图片。 如果这还不够,我也很抱歉,我真的不习惯使用论坛之类的东西。

我不完全确定这是否算作答案,因为我仍然不知道第一种情况下是什么导致了问题。无论如何,通过编辑 SQL 语句以按主键的顺序显示行,我已经让我的代码完成了我想要的操作。按 [玩家#] 订购。我确实不得不将名称更改为 "Player" 因为 "CommandBuilder" 不喜欢特殊字符。