2

我有一个带有 *.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 文件中的数据一样的。这是巧合吗?或者我可以确保用户在应用程序更新之间不会丢失数据吗?

4

1 回答 1

1

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

来自MSDN上 ClickOnce 如何在 ClickOnce 应用程序(数据目录和应用程序版本)中执行应用程序更新访问本地和远程数据:

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

如果数据文件在旧版本的应用程序中与新版本中的哈希值不同,则 ClickOnce 将用新版本的服务器替换旧版本的文件。

这意味着如果 .sdf 不更改,您不会丢失数据,文件将被复制(由于数据目录更改,文件的路径将更改)。

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

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

于 2013-06-20T20:34:34.043 回答