在最终用户机器上分发数据库
Posted
技术标签:
【中文标题】在最终用户机器上分发数据库【英文标题】:Distribute database on end user machine 【发布时间】:2013-01-23 12:30:47 【问题描述】:我有一个使用*.db3
数据库的小型桌面应用程序。当我在其他机器上运行应用程序时,找不到数据库:使用了绝对路径。
目前,在我的App.Config
文件中,我有
connectionStrings>
add name="MyProject.My.MySettings.MyProjectSQLiteConnectionString"
connectionString="data source="N:\Long path do my DB\MyDB.db3""
providerName="System.Data.SQLite" />
/connectionStrings>
我想用这样的东西替换数据源(不幸的是不工作)
data source =|DataDirectory|\MyDB.db3
如何在我的连接字符串中输入应用程序目录(相对路径)?
【问题讨论】:
使用%APPDATA%
之类的路径怎么样?还是让用户从您应用的首选项屏幕更改此配置?
【参考方案1】:
从史蒂夫 B 的评论开始,后来发现这个article,我通过以下方式解决了我的问题:
-
在用户计算机上,数据库被复制到
%AppData%
目录中。
|DataDirectory|
在调试和发布模式之间动态更改。
这允许不更改连接字符串。
与此同时,我选择了 MS Access *.accdb 数据库,但无论如何这里是我的代码。
Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
#If (Not Debug) Then
pathMyAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\MyApp"
'"DataDirectory" is used in the Connection String
AppDomain.CurrentDomain.SetData("DataDirectory", pathMyAppData)
'The application closes if no database is found
If Not File.Exists(pathMyAppData & "\MyDB.accdb) Then
MsgBox("Database not found. Program closes.", MsgBoxStyle.Critical, "Error")
Me.Close()
End If
#End If
【讨论】:
以上是关于在最终用户机器上分发数据库的主要内容,如果未能解决你的问题,请参考以下文章