2

我已经下载了 VB 2010 的试用版并制作了一个连接到 Access 2007 MDB 文件的小应用程序。

有几件事出了问题:

  1. 如果我尝试发布它,然后运行生成的安装文件,它会说找不到 .MDB 文件。

  2. 如果我在开发过程中运行它(F5),它运行良好,当我在 DataGridView 中输入新数据时,我知道它会被保存,因为当我关闭会话并再次按 F5 时,新输入的数据仍然存在。(更新数据的相关代码很简单):

    Me.Validate()
    Me.MenuItemsBindingSource.EndEdit()
    Me.MenuItemsTableAdapter.Update(Me.MenuOrdersDataSet.MenuItems)
    Me.MenuOrdersDataSet.AcceptChanges()
    

但是,如果我关闭整个项目并重新运行它并查看 DataGridView,或者如果我手动检查 .MDB 文件,它不再具有新输入的数据。

这是我的连接代码:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Me.MenuItemsTableAdapter.Fill(Me.MenuOrdersDataSet.MenuItems)
    Dim con As New OleDb.OleDbConnection
    Dim dbString As String
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String

    dbString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\MenuOrders.accdb"

    con.ConnectionString = dbString
    con.Open()

    sql = "SELECT * FROM MenuItems"
    da = New OleDb.OleDbDataAdapter(sql, con)
    da.Fill(ds, "MenuItems")
    con.Close()

End Sub

怎么了?这些问题是否与试用版有关,还是我应该注意其他一些明显的问题?

4

2 回答 2

1

最后做了以下修复。

在解决方案资源管理器中,我打开 App.config 并将数据库的绝对路径放在connectionStrings标签中,替换默认|DataDirectory|文本。

不确定这是否是最好的选择……但它奏效了!

<connectionStrings>
    <add name="MenuSystem.My.MySettings.MenuDBConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Administrator\Documents\MenuDB.accdb"
        providerName="System.Data.OleDb" />
</connectionStrings>
于 2012-11-22T18:05:37.463 回答
1

我曾经遇到过同样的问题,我想我通过将我的数据源/数据库复制到输出目录设置为“如果更新则复制”来解决它,位于 MyDatabase.mdf 文件的属性窗口中。

有时该选项可以默认为“始终”,这解释了为什么每次运行应用程序时数据集都会重置。

于 2012-11-22T13:15:02.290 回答