首页 > 解决方案 > 我在 VB.NET Applicaton 中向数据库添加新记录的方法中缺少什么?

问题描述

我的 VB.Net 用户表单中有一个来自 Access 的数据表(名为“Effects”)。

来自数据库的详细信息表格

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

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 号始终是 -ve 整数。
  2. 当我单击 SAVE ENTRY 按钮并重新启动应用程序时,更改尚未保存。

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

编辑:

我正在使用的表...

标签: vb.netms-accessvisual-studio-2010

解决方案


生成的新记录的 ID 号始终是 -ve 整数。

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

当我单击 SAVE ENTRY 按钮并重新启动应用程序时,更改尚未保存。

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

为避免这种情况,请在解决方案资源管理器中选择您的数据文件,打开“属性”窗口并将Copy to output directory设置为Copy if newer。这样,只有当您明确删除旧副本或更改源文件时,才会创建新副本。

采用双文件方法的原因是您应该保持源文件干净且不含测试数据,以便在构建应用程序的发布版本时创建的副本可以与新应用程序一起部署。


推荐阅读