【问题标题】:Can I be sure a user-local database isn't cleared out between ClickOnce updates?我可以确定在 ClickOnce 更新之间没有清除用户本地数据库吗?
【发布时间】:2013-06-20 15:39:35
【问题描述】:

我有一个带有 *.sdf 文件的 ClickOnce 应用程序,我将其用作数据库。每个用户都有一个本地数据库。我想确保当我向我的应用程序部署新更新时,用户不会丢失其本地数据库中的任何数据。

我运行了一个简单的测试,似乎是在应用程序更新之间保存了数据库记录。然而,我检查了数据库连接字符串,并且应用程序使用的 *.sdf 文件在更新之间是 不同 的。看起来 *.sdf 文件位于临时文件夹中:

Version 1: C:\Users\username\AppData\Local\Apps\2.0\Data\BTC7847T.TGN\
  RX0XEL7T.28C\db_v..tion_5b84da8ac499fbd9_0001.0000_218dbb369a32672c\Data\db.sdf

Version 2: C:\Users\username\AppData\Local\Apps\2.0\Data\BTC7847T.TGN\
  RX0XEL7T.28C\db_v..tion_5b84da8ac499fbd9_0001.0000_228bdaad95bad96c\Data\db.sdf

这些文件夹路径不一样,但*.sdf文件中的数据一样的。这是巧合吗?或者我可以确保用户在应用程序更新之间不会丢失数据?

【问题讨论】:

    标签: sql-server-ce clickonce embedded-database


    【解决方案1】:

    由于我看到C:\Users\username\AppData\Local\...,我猜.sdf 文件被标记为数据文件。

    来自 MSDN 上的 How ClickOnce Performs Application UpdatesAccessing Local and Remote Data in ClickOnce Applications(数据目录和应用程序版本):

    应用程序的每个版本都有自己的数据目录,即 与其他版本隔离。 (...) 安装新版本的应用程序时,ClickOnce 将从以前版本的数据中复制所有现有数据文件 目录进入新版本的数据目录——无论它们是 包含在原始部署中或由应用程序创建。

    ClickOnce 会将旧版本的文件替换为新版本 如果数据文件在 旧版本的应用程序与新版本一样。

    这意味着如果.sdf不改变你不会丢失数据,文件将被复制(只是文件的路径会随着数据目录的变化而改变)。

    此外,如果应用程序的早期版本创建了一个新文件,该文件包含 与新版本部署中包含的文件同名, ClickOnce 将用新文件覆盖旧版本的文件。 在 在这两种情况下,旧文件都会被包含在一个子目录里面 名为 .pre 的数据目录,这样应用程序仍然可以 访问旧数据以进行迁移

    未经测试,但这意味着如果 .sdf 源发生更改并在客户端重新创建,您仍然可以访问以前的用户数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多