我可以确定ClickOnce更新之间没有清除用户本地数据库吗?

时间:2013-06-20 15:39:35

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

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

我运行了一个简单的测试,似乎是在应用程序更新之间保存数据库记录的情况。但是,我检查了数据库连接字符串,并且应用程序使用的* .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文件中的数据相同。这有些巧合吗?或者我可以放心,用户不会在应用程序更新之间丢失数据吗?

1 个答案:

答案 0 :(得分: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源有更改并在客户端上重新创建,您仍然可以访问以前的用户数据。