在最终用户机器上分发数据库

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

【讨论】:

以上是关于在最终用户机器上分发数据库的主要内容,如果未能解决你的问题,请参考以下文章

仅为 10-20 个最终用户轻松分发 iOS 应用程序

负载均衡与web服务集群搭建

Android事件分发机制

分发系统 expect

如何防止最终用户在 MS Access 2010 应用程序中从前端查看后端数据?

发布订阅数据库同步问题分享