【问题标题】:What am I missing in my approach to add new records to my database in VB.NET Applicaton?我在 VB.NET Applicaton 中向数据库添加新记录的方法中缺少什么?
【发布时间】:2021-01-27 17:50:12
【问题描述】:

我的 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. 当我单击“保存条目”按钮并重新启动应用程序时,更改尚未保存。

我在网上看到的其他示例与我的问题不同。

编辑:

【问题讨论】:

    标签: vb.net ms-access visual-studio-2010


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 您好 jmc,感谢您的快速和深思熟虑的回复。我已听从您的指示;但是我不认为他们解决了这个问题。除了“效果”表之外,我还有另一个可以在 Access 中实时编辑和观看更新的表。该表(“位置”)的不同之处在于行已经存在,我只是在编辑和更新它们。你是说我上面的代码没有问题?
    • 我认为能够实时观看Locations表更新是因为它是在TableAdapterManager中启用的;我不相信我可以拥有多个这些,或者对来自同一数据源的多个表进行一项工作......
    • 如果你做的事情正确,那么你的代码就没有问题。 UpdateAll 方法应该在与您的DataSet 关联的每个相关表适配器上调用Update,因此您对哪个表进行什么更改应该很重要。如果我没记错的话,UpdateAll 方法应该返回一个Integer,它表示受操作影响的记录数。在罕见而遥远的情况下,我使用了键入的DataSet,我调用了个人Update 方法,我相信UpdateAll 总结了所有这些方法。在你的情况下这个数字是多少?
    • 对于ID值,如果你想将app中的临时负值替换为数据库生成的最终值,你需要实际获取这些值。请参阅here 了解如何执行此操作。
    • 我不确定如何查看该号码。我一直在对 Locations 表使用这种方法。现在我正在使用并希望更新应用程序内的多个表,我遇到了问题。每个表都有一个主键列,其中包含唯一值。我现在在 UPDATE ALL 方法上遇到错误,因为它说“当传递带有修改行的 DataRow 集合时,更新需要一个有效的 UpdateCommand。”这让我今天下午关注了很多谷歌搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多