代码之家  ›  专栏  ›  技术社区  ›  aligray

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

  •  4
  • aligray  · 技术社区  · 16 年前

    我正在构建一个应用程序,它将使用一些设置和本地SQL服务器。我的问题是,当需要更新应用程序时,设置或数据会被覆盖吗?

    如果以后我想换一些桌子怎么办?

    2 回复  |  直到 16 年前
        1
  •  3
  •   RobinDotNet    16 年前

    坦率地说,我一直认为ClickOnce处理数据的方式是危险的。如果使用clickOnce部署数据库,它会将其放在datadirectory中。然后,当您将更新部署到应用程序时,它会将数据库转发到安装下一版本应用程序的文件夹。但是,如果数据库发生更改,它会将其复制到文件夹+\pre,并在datadirectory中放置一个新的文件夹。如果你没有意识到你改变了它,它无论如何都会取代它。如果您打开一个sqlce数据库并检查数据结构, WHAM 它被部署。惊喜!

    我认为将数据存储在用户配置文件下的另一个文件夹中更有意义,而且更安全。然后您可以选择何时更新数据库。 This article 将显示如何移动您的数据,使其不受ClickOnce更新的影响。

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

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

        2
  •  0
  •   Bradley Smith    16 年前

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

    如果需要覆盖用户级设置,则必须通过编程方式进行。