0

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

4

2 回答 2

1

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

在此处输入图像描述

于 2017-03-16T17:10:40.033 回答
0

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

正确的方法

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

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

结果你应该有这样的东西(样本):

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

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

解决方法

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

  1. 将数据库文件包含到具有不同名称的部署包中(例如database.initial.ext)。
  2. 在应用程序启动时重命名数据库文件以更正一个(例如database.ext),如果它不存在。

结果你应该有这样的东西(样本):

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

优点:你需要最少的努力来实现这样的流程。

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

于 2017-03-16T18:01:24.380 回答