vb.net - 我在 VB.NET Applicaton 中向数据库添加新记录的方法中缺少什么?
问题描述
我的 VB.Net 用户表单中有一个来自 Access 的数据表(名为“Effects”)。
我有两个按钮(AddEffect.Click 和 SaveEffect.Click),它们使用ADD NEW、 END EDIT和UPDATEALL。这在应用程序打开时有效。
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
但是,有两个问题。
- 生成的新记录的 ID 号始终是 -ve 整数。
- 当我单击 SAVE ENTRY 按钮并重新启动应用程序时,更改尚未保存。
我在网上看到的其他例子与我的问题不一样。
编辑:
解决方案
生成的新记录的 ID 号始终是 -ve 整数。
这正是它应该的样子。您的应用程序生成的值只是暂时的。最终 ID 由数据库在您保存时生成。temp 值为负值,以确保它不会与数据库中已有的任何内容发生冲突。
当我单击 SAVE ENTRY 按钮并重新启动应用程序时,更改尚未保存。
您几乎肯定会覆盖您的数据库。基于文件的数据库应该工作的方式是将源文件添加到项目中,然后将其与 EXE 一起复制到输出文件夹中。这是您的应用在调试时连接到的副本。如果您在下次构建时创建一个新副本(这是默认设置),您将丢失对旧副本所做的任何更改。
为避免这种情况,请在解决方案资源管理器中选择您的数据文件,打开“属性”窗口并将Copy to output directory设置为Copy if newer。这样,只有当您明确删除旧副本或更改源文件时,才会创建新副本。
采用双文件方法的原因是您应该保持源文件干净且不含测试数据,以便在构建应用程序的发布版本时创建的副本可以与新应用程序一起部署。
推荐阅读
- ionic-framework - 有没有办法在 Ionic 4 中使用月历视图来实现 DatePicker
- html - 无法使用 wget 命令获取登录页面
- java - 正在传递 TypeReference
在 java 中使用泛型时手动一个好习惯 - c# - GetDataRow 为有效的 rowHandle 返回 null
- r - 如何基于R中的矩阵连接多个列值
- python-3.x - 调用函数后全局变量不变
- python - tf.data 对象转换为具有多个输入的 Keras 模型
- apache-spark - Kubernetes 上 Spark 结构化流的问题
- rule-engine - 检查剪辑中的多个 defrules 的语法
- kubernetes - 在 Rancher 中公开自定义工作负载指标