visual studio一键发布覆盖LocalDatabase

时间:2017-03-16 16:55:17

标签: c# visual-studio local-database oneclick

我有一个我在C#工作的项目,我想发布一个本地数据库。
问题是,每次我发布软件时,数据库都会被覆盖,我丢失了所有数据。 如何设置项目以使本地数据库不被覆盖?

2 个答案:

答案 0 :(得分:1)

在解决方案资源管理器中选择.mfd文件,然后转到属性>高级>复制到输出目录并选择“如果更新则复制”。只有在开发期间对数据库进行更改时,才会使数据库被覆盖。

enter image description here

答案 1 :(得分:0)

据我所知,您的本地数据库是包含在部署包中的文件。基于此:

正确的方法

从版本到版本,您可能需要更改数据库结构或使用新功能扩展它。所以,我建议从部署包中排除本地数据库文件。 而不是复制数据库文件使用脚本来创建数据库:

  1. 准备创建数据库的SQL脚本(您可能已经拥有它们,因为您已准备好数据库)。如果数据库不存在,则应创建数据库,更改存储过程,根据需要更新表等。
  2. 如果您有一些默认数据,那应该与数据库一起使用 - 您也可以使用脚本插入它们。如果您的初始数据库很大并且您不想编写插入脚本 - 将初始数据库包含在名称与您的活动数据库不同的部署包中(例如 database.initial.ext )和如果此类基础不存在,请在应用程序启动时将其手动重命名为活动数据库(例如 database.ext )。
  3. 在应用程序启动时,运行所有创建/更新数据库的脚本。
  4. 继续执行申请。
  5. 结果你应该有这样的东西(样本):

    public static void Main(object[] args)
    {
        CreateDatabaseIfNotExists();
        RunDatabaseUpdateQueries();
        InsertInitialDataIfDatabaseNew();
        // Rest of your code...
    }
    

    优点:您将获得灵活的解决方案,可在您提供新版本时更改数据库。 缺点:您必须编写更新脚本并在应用程序启动时运行它们。

    解决方法

    作为建议流程的替代方案,您可以简单地执行下一步:

    1. 将数据库文件包含在具有不同名称的部署包中(例如 database.initial.ext )。
    2. 在应用程序启动时重命名数据库文件以更正数据库文件(例如 database.ext ),如果它不存在。
    3. 结果你应该有这样的东西(样本):

      public static void Main(object[] args)
      {
          CreateDatabaseIfNotExists();
          // Rest of your code...
      }
      

      优点:您需要尽力实施此类流程。

      缺点:解决方案不灵活,如果在将来的版本中更新数据库结构,您将面临问题。