在 VB.NET 应用程序中向我的数据库添加新记录的方法中我缺少什么?

What am I missing in my approach to add new records to my database in VB.NET Applicaton?

我的 VB.Net 用户表单中有来自 Access 的数据 table(名为“效果”)。

我有两个按钮(AddEffect.Click 和 SaveEffect.Click),它们使用 ADD NEWEND EDIT全部更新。这在应用程序打开时有效。

新记录出现在 GRIDVIEW 中,其中包含我输入到各种文本框中的数据。

    Private Sub AddEffect_Click(sender As Object, e As EventArgs) Handles AddEffect.Click
               
            Me.EffectsBindingSource.AddNew()

           End Sub

 Private Sub SaveEffect_Click(sender As Object, e As EventArgs) Handles SaveEffect.Click
            
            Me.EffectsBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.DatabaseDataSet)
    
                End Sub

但是,有两个问题

  1. 生成的新记录的 ID 号始终是一个整数。
  2. 当我单击“保存条目”按钮并重新启动应用程序时,更改尚未保存。

我在网上看到的其他例子与我的问题不相似。

编辑:

The ID Number of the New Record generated is always a -ve integer.

这正是它应该的样子。您的应用程序产生的价值只是暂时的。最终的 ID 是在您保存时由数据库生成的。 temp 值为负,以确保它不会与数据库中已有的任何内容发生冲突。

When I click the SAVE ENTRY button and restart the application, the changes have not been saved.

您几乎可以肯定 over-writing 您的数据库。 file-based 数据库的工作方式是将源文件添加到项目中,然后将其与 EXE 一起复制到输出文件夹中。这是您的应用程序在调试时连接到的副本。如果您在下次构建时创建一个新副本(这是默认设置),您将丢失对旧副本所做的任何更改。

为避免这种情况,select 您在解决方案资源管理器中的数据文件,打开属性 window 并将 复制到输出目录 设置为 如果较新则复制。这样,只有在您明确删除旧副本或更改源文件时才会创建新副本。

dual-file 方法的原因是你应该保持你的源文件干净并且没有测试数据,这样当你构建你的应用程序的发布版本时创建的副本将准备好使用新的应用程序进行部署。