2017-03-16 98 views
0

我有一个项目,我一直在用C#处理本地数据库,我想发布。
问题是,每当我发布一个新版本的操作系统时,数据库都会被忽略,并且我丢失了所有的数据。 我如何设置项目以便本地数据库不会被覆盖?visual studio单击发布覆盖LocalDatabase

回答

1

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

enter image description here

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... 
} 

优点:你需要免得努力实现这样的流动。

缺点:的解决方案是不灵活,你将面临的问题的情况下,如果数据库结构应该在未来的版本更新。