如何更新现有的sqlite数据库而不会丢失Windows Phone 8中的数据?

时间:2015-11-25 05:40:19

标签: c# sqlite windows-phone-8

我目前正在使用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;}

1 个答案:

答案 0 :(得分: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);