1

我有一个带有 mssql 数据库的 winforms 项目,该数据库存储用户创建的数据,全部在 Visual Studio C# 2010 中创建。我能够发布项目并在本地计算机上单击一次进行部署。该应用程序会自动更新并且运行良好。当我安装较新版本时,它会删除数据库中的所有表数据。我目前在发布时部署的数据库中没有任何数据,但如果将来需要,我想这样做。

有没有办法在视觉工作室中改变这种行为?如果不是,我该如何阻止数据库在更新时删除所有用户数据?

我之前问过这个问题,但是用户认为这是非建设性的。一位用户表示“这看起来更像是设置的问题,它只是覆盖了数据库,与 C# 或 Visual Studio 无关”

有人可以详细说明这个用户的 SETUP 是什么意思吗?

我认为这将是一个非常有建设性的问题,因为这是自动更新 winforms 应用程序的一个非常重要的部分。我已经搜索过,但似乎无法为这个问题使用正确的词。如果这对本网站没有建设性或相关性,至少有人能指出我正确的方向吗?

4

2 回答 2

1

我认为以前的用户是对的。如果我正确理解您的问题,那么它与版本控制和部署策略有关,而不是 VS 或 C#。

您可以在您的应用程序中构建功能,以检查加载时应用程序的版本以及数据库是否已经存在,然后决定从那里做什么。

一种解决方案可能是使用 SQL 脚本进行部署,这些脚本根据您正在部署的版本或数据库是否存在于之前更新数据库,而不是简单地覆盖它

可能的答案

部署策略

另一种部署策略esp 策略 #3 - 使用可重新运行的脚本

编辑我认为您的问题与您是使用调试还是发布部署无关

于 2012-12-04T03:55:19.557 回答
0

您说在 Visual Studio 中运行应用程序时会发生这种情况。我的猜测是数据库(包含在 VS 项目中)的复制属性设置为“始终复制”。这意味着它会在您构建时将数据库复制到 \bin\ 文件夹,并针对新副本运行。

当您发布时,ClickOnce 会将该数据库放在 ApplicationData 文件夹中。然后,当您发布更新时,它会将数据库向前复制到新版本中的 ApplicationData 文件夹。老实说,我从来不喜欢这样——如果你的用户卸载了应用程序,所有的数据都会丢失。我推荐这种方法,它向您展示了如何通过将数据复制到用户配置文件下的 ApplicationData 来更好地控制这种情况。如果您在 VS 中运行该应用程序,这也将起作用,因为它会将其复制到您的配置文件中,然后重复使用同一个数据库。

于 2012-12-05T19:34:35.700 回答