如何在ClickOnce的安装文件的启动路径上包含MS Access DB,并使用app.exe调用它



我用VB构建了一个应用程序。. NET集成了Access DB。在部署应用程序之前,我有一个Windows窗体项目的标准结构,bin/Debug文件夹和EXE文件与DB文件。

现在我有了"Public"包含安装文件的文件夹,如安装程序,应用程序清单等。这样,应用程序EXE(即进入AppDataLocalApps)找不到DB并返回以下错误:

System.Data.OleDb。OleDbException (0x80004005):无法找到文件"C:UsersmeAppDataLocalApps2.0 qp63k7b2 . q60 QXCJLXG6.VWWcons..tion_f8ea45aa6e4eea3e_0001.0000_d39d4d46cbe37100database.accdb".

因为我使用的连接字符串是:

Provider=Microsoft.ACE.OLEDB.12.0; Data source=" & Application.StartupPath & "/database.accdb

问题是:我可以手动将数据库放入"发布"吗?文件夹中的安装文件,并将连接字符串更改为指向该文件?像这样:

Provider=Microsoft.ACE.OLEDB.12.0; Data source=" & Application.**setupPath** & "/database.accdb

你的连接字符串是错误的。不要这样做:

"Provider=Microsoft.ACE.OLEDB.12.0; Data source=" & Application.StartupPath & "/database.accdb"

这样做:

"Provider=Microsoft.ACE.OLEDB.12.0; Data source=|DataDirectory|database.accdb"

因为没有代码,您可以将其存储在配置文件中,而不是在运行时构建它。ClickOnce为数据文件创建一个专用文件夹。当您使用"|DataDirectory|"在连接字符串中,它将解析到非ClickOnce应用程序中的程序启动文件夹(包括VS中的while调试),但它将解析到ClickOnce应用程序中的专用数据文件夹。如果你按照你应该的方式去做,它就会正常工作。不要试图移动数据库。修改你的连接字符串。