使用ClickOnce部署更新本地SQL Server数据库

我正在构建一个将使用某些设置和本地SQL Server的应用程序。 我的问题是,到了更新应用程序的时候; 是否会覆盖设置或数据?

如果我想在将来改变一些表格会怎样?

坦率地说,我一直认为ClickOnce处理数据的方式很危险。 如果使用ClickOnce部署数据库,则会将其放在DataDirectory中。 然后,当您将更新部署到应用程序时,它会将数据库向前复制到安装下一版本应用程序的文件夹。 但是,如果数据库发生更改,它会将其复制到文件夹+ \ pre,并将新的数据库放入数据目录中。 如果你没有意识到你改变它,它无论如何都会取而代之。 如果您打开SQLCE数据库并检查数据结构,那么它就会被部署。 惊喜!

我认为将数据存储在用户配置文件下的另一个文件夹中更有意义,而且更安全。 然后您可以选择何时更新数据库。 本文将介绍如何移动数据,以便从ClickOnce更新中获得安全保障。

此外,当您想要对数据库进行更改时,可以使用SQL语句来执行此操作,例如“ALTER TABLE”等。 我已经创建了一个脚本并将其部署为一个长字符串(其中包含回车符)并让应用程序通过回车将资源拆分并逐个执行语句。 你得到了一般的想法。

关于用户设置的一条评论 – 您可以通过UI以编程方式更改这些设置(即为用户提供function)。 但请注意,如果您更改应用程序的证书并运行足够高版本的.NET(3.5,4),它本身不会导致问题,但它与ClickOnce应用程序具有不同的身份,并且在发布下一个更新时不会转发用户设置。 出于这个原因,我还为配置数据推出了自己的XML文件,并将其存储在LocalApplicationData中。

通过ClickOnce更新期间不会覆盖用户级设置,但您可以推送新的应用程序级设置,因为更新期间覆盖[YourExeName].exe.config文件。

如果需要覆盖用户级设置,则必须以编程方式执行此操作。