【问题标题】:Delete & Insert Problems to Access DB with Adapters使用适配器删除和插入访问数据库的问题
【发布时间】:2014-12-31 16:04:45
【问题描述】:

我即将放弃...我正在将 DataAdapters 与连接的 Access 数据库一起使用(测试正常),数据集更新正常,但位于我的项目根文件夹中的数据库永远不会更新我尝试插入或删除。这是我正在处理的删除操作;

Private Sub btnDeleteJob_Click(sender As Object, e As System.EventArgs) Handles btnDeleteJob.Click
    Dim delJobID = ComboBox2.SelectedValue
    Dim delJobRowAdpt As New DCGDataSetTableAdapters.MainTableAdapter
    Dim delJobRow As DCGDataSet.MainRow
    Dim intDelete As Integer
    delJobRow = DCGDataSet.Main.FindByID(delJobID)
    delJobRow.Delete()
    intDelete = delJobRowAdpt.Update(DCGDataSet.Main)
    If intDelete = 1 Then
        MessageBox.Show("Job Deleted")
        'comboClear()
        clearTabOne()
        'ComboBox2.SelectedValue = -1
        Me.MainTableAdapter.Fill(Me.DCGDataSet.Main)
    Else
        MessageBox.Show("Job Failed to Delete")
    End If
    ComboBox2.SelectedValue = -1
End Sub

还有我的插入代码;

Private Sub btnAddNew_Click(sender As Object, e As System.EventArgs) Handles btnAddNew.Click
    ' Add new Job to the database
    Dim newJobRow As New DCGDataSetTableAdapters.MainTableAdapter
    Dim intInsert As Integer
    Dim jobText = txtBoxAddNewJob.Text
    intInsert = newJobRow.InsertJob(jobText) 'InsertJob Adapter = INSERT INTO `Main` (`tbl_Job_Name`) VALUES (?)
    If intInsert = 1 Then
        MessageBox.Show("New Job Added")
        ' Update the comboBox values
        newJobRow.Fill(DCGDataSet.Main)
        'Me.MainTableAdapter.Fill(Me.DCGDataSet.Main)
        'newJobRow.Insert(jobText)
        newJobRow.Update(DCGDataSet.Main)
        'DCGDataSet.AcceptChanges()
        txtBoxAddNewJob.Text = ""
        clearTabOne() ' Label5.Visible = False     ComboBox3.Visible = False
    Else
        MessageBox.Show("Job Not Added")
    End If
End Sub

这是我的数据集

如果我关闭我的应用程序并打开 Bin/Debug 文件夹中的数据库文件,更改就在那里,但直到我再次运行该应用程序。我知道我很接近了,但我被困住了,我需要另一双眼睛......

【问题讨论】:

  • 位于我的项目根文件夹中的数据库永远不会更新这里有些令人困惑。
  • 数据源 .a​​ccdb 文件本身位于项目文件夹 C:\Users\mgfranz\Documents\Visual Studio 2010\Projects\DCG 中。奇怪的是(或者正常),在 C:\Users\mgfranz\Documents\Visual Studio 2010\Projects\DCG\DCG 中有另一个 db 副本,在 C:\Users\mgfranz\ 中还有另一个副本Documents\Visual Studio 2010\Projects\DCG\DCG\bin\Debug.
  • 最后一个是将属性复制到输出目录设置为与从不复制不同的值的效果。在这种情况下,如果满足复制到输出目录中的条件,您的数据库将被复制到输出目录。输出目录在您的项目属性中定义,可以随意更改。所以也许那里已经改变了一些东西。请记住,除非您在项目的属性中更改它,否则您的程序(WinForms)是从输出目录执行的,因此您的相对路径应该能够适应这种情况
  • 我明白,我的属性设置为 Copy if Newer 是有道理的。但是是否可以完成更改并将其保存到项目根目录中的实际数据库中?现在,每次对数据库进行更改时,我都必须将 .accdb 从 Bin 复制到 Project\DCG\DCG。
  • 是的,在 app.config ConnectionString 部分设置正确的路径。 (附带说明一下,Access 会在打开 accdb 文件时更改其时间戳。无需对数据或架构进行实际更改)

标签: vb.net visual-studio-2010


【解决方案1】:

我猜当您将数据库添加到项目时,您已经允许 Visual Studio 创建您的数据库的副本。

请测试此解决方案:从项目中删除数据库并重新添加。这一次,在添加的最后一步,当 Visual Studio 询问您是否在解决方案目录中创建数据库副本时,选择 NO

如果您选择“是”,则每次运行程序时,都会在 Bin/Debug 文件夹中创建一个新的数据库副本,您的更改会影响该副本,当您停止执行时,该副本将被删除。

注意:如果有,请不要忘记更正连接字符串

希望对您的回答有所帮助。 如果我的写作不正确,请原谅。我是英语初学者,但我很快就会学会...

【讨论】:

    【解决方案2】:

    您需要在项目的根目录中更改数据库文件上的复制到输出目录属性。该属性的默认设置是“始终复制”。您可能需要的设置是“如果较新则复制”。仅当您对数据库进行一些更改并构建项目时,这才会从项目根目录复制数据库。现在,如果您在测试运行中进行了一些更改,这些更改将在您的下一次测试运行中仍然存在。

    这家伙也有同样的问题:Can I commit changes to actual database while debugging C# in Visual Studio?

    【讨论】:

    • 我已经想到了。 .accdb 的属性设置为 Copy If Newer。我的调试不断恢复到 DataSource DB,它永远不会看到对数据集更新所做的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多