【问题标题】:How to update existing sqlite database without losing data in Windows Phone 8?如何更新现有的 sqlite 数据库而不丢失 Windows Phone 8 中的数据?
【发布时间】:2016-02-27 19:28:07
【问题描述】:

我目前正在使用 Windows Phone 8 中的 SQLite 数据库。我有一个表,其中包含一些列和数据,应用程序是实时的。现在随着下一次更新,我想在该表中添加一个新列,而不会丢失之前插入的数据。

有人可以建议我怎样才能达到这个要求吗?

编辑

这是我要在其中添加新列的班级。

public class Info
{
   [PrimaryKey]
   public int id{get;set;}
   public string name{get;set;}
   public string information{get;set;}
   public string nick_name{get;set;}
}

列dataType为字符串,如下

public string disp_id{get;set;}

【问题讨论】:

  • 请查看我的更新答案。

标签: c# sqlite windows-phone-8


【解决方案1】:
  • 用一些临时名称重命名旧表
  • 创建具有所需名称和新列定义的新表
  • 将旧表中的数据复制到新表中并添加新列数据
  • 放下旧表

添加您的表定义和新的列类型也可能有助于我们为这项工作提供一些 SQL。

无论如何,应用程序在更新时都会停止。

编辑:

由于您尚未发布精确响应所需的 SQL,因此我“想象”了它的外观,因此我可以完成此答案。 鉴于您的表格如下所示:

CREATE TABLE "info" (
"id"  INTEGER NOT NULL,
"name"  TEXT,
"information"  TEXT,
"nick_name"  TEXT,
PRIMARY KEY ("id" ASC)
);

添加列将恢复到此:

PRAGMA foreign_keys = OFF;

alter table "info" rename to "info_temp";

CREATE TABLE "info" (
"id"  INTEGER NOT NULL,
"name"  TEXT,
"information"  TEXT,
"nick_name"  TEXT,
"disp_id"  TEXT,
PRIMARY KEY ("id" ASC)
);

insert into "info" ("id", "name", "information", "nick_name") select "id", "name", "information", "nick_name" from "info_temp";

DROP TABLE "main"."info_temp";

这是做什么的:

  1. 禁用当前事务的外键完整性检查,以便 修改不会因为完整性检查而失败;
  2. 将信息表重命名为 info_temp;
  3. 使用更新的架构创建一个新的信息表;
  4. 将原始信息表中的数据复制到新表中;
  5. 删除旧信息表 (info_temp);

【讨论】:

  • 你能提供一些例子或链接吗?
  • @KinjanBhavsar 编辑您的问题以添加表定义和新列类型。
  • @KinjanBhavsar 您的应用程序是否首先使用 EF 代码?
  • 没有。我正在插入从服务器获取的所有数据。
  • @KinjanBhavsar 那么为什么要发布 c# 代码呢?请添加 SQL 表定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多