Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sqlite插入或返回现有项_C#_Sqlite_Insert Update - Fatal编程技术网

C# Sqlite插入或返回现有项

C# Sqlite插入或返回现有项,c#,sqlite,insert-update,C#,Sqlite,Insert Update,我有以下数据结构:ID int、Name文本、Info文本、List文本。 List是一个枚举列表,其字符串的语法为:word1、word2、word3 我希望能够添加具有以下内容示例的项目:ID=null,Name=Abc,Info=xyz,List=word3 在这种情况下: 如果尚未存在,请插入项目。 否则,根据以下名称更新项目(如果存在):忽略ID |覆盖信息|检查列表是否包含每个给定单词,如果不包含,则将其附加为分隔符。 添加的每个项只有一个列表枚举,但是数据库中的条目应该为每个条目收

我有以下数据结构:ID int、Name文本、Info文本、List文本。 List是一个枚举列表,其字符串的语法为:word1、word2、word3

我希望能够添加具有以下内容示例的项目:ID=null,Name=Abc,Info=xyz,List=word3 在这种情况下:

如果尚未存在,请插入项目。 否则,根据以下名称更新项目(如果存在):忽略ID |覆盖信息|检查列表是否包含每个给定单词,如果不包含,则将其附加为分隔符。 添加的每个项只有一个列表枚举,但是数据库中的条目应该为每个条目收集它们,以便在查询它们时,可能有多个枚举

所以问题是,我该怎么做?我可以想象,这种方法也可能奏效:

如果尚未存在,请插入项目。 否则返回现有项,让我自己在列表中用C操作它,然后做一个简单的更新。
在这种情况下,我想知道如何执行insert或else查询?或者有更好的方法来完成所有这些吗?

要插入或更新现有的,您可以

由于您的data.List默认名称可能包含枚举的任意组合,因此您可以改用标志,例如:

公共枚举词 { 字1=1, 字2=2, 字3=4 } 现在,您可以使用设置/检查/切换位:

//仅设置单词的值。单词1 var myWord=Words.word1;//MyWords=1 //使用按位或将值字.word3添加到现有值字: myWord |=Words.word3; /* * 001 * | 100 * --- * 101 */ //使用位和检查是否已设置值Words.word2: 如果myWord&Words.word2==Words.word2{/*做点什么*/} /* * 101 * & 010 * --- * 000 */ //使用位异或切换位字。字3 myWord^=Words.word3; /* * 101 * ^ 100 * --- * 001 */ //再一次,根据前面的结果: myWord^=Words.word3; /* * 001 * ^ 100 * --- * 101 */ 然后,在数据库中,可以用INT替换字段列表的类型

另一种方法是使用规范化数据库,使用3个表:

数据:id int、PK、名称文本、信息文本

列表:id int、PK、列表文本


DataList:id_data int,FK,id_list int,FK,主键为两个FK的组合,以确保值的唯一性

可以使用“upsert”插入或更新,要求名称具有唯一约束。此查询应实现以下功能:

INSERT INTO sometable (Name, Info, List)
  VALUES(@name,@info,@list)
  ON CONFLICT(Name) DO UPDATE SET
    Info = excluded.Info,
    List = excluded.List;
SELECT ID, Name, Info, List FROM sometable WHERE Name = @name

如果具有给定名称的条目尚不存在,则此查询执行插入操作;更新信息和列表(如果有),并在任何情况下选择插入或更新的值。

是的,更好的方法是使用关系数据库作为关系数据库。。。并在另一个中创建列表table@Selvin-即使这些只是枚举的重复元素?它们由一个ID、一个引用ID和一个字节或字符串组成,每个主条目都有1-5个。但它们没有任何独特的信息,只不过是~5个项目的副本。啊,再次感谢您!使用带标记的枚举是一个很好的解决方案。这正是我需要的。顺便说一句,我只在这个示例中使用了名称列表,没有更好的抽象名称。
INSERT INTO sometable (Name, Info, List)
  VALUES(@name,@info,@list)
  ON CONFLICT(Name) DO UPDATE SET
    Info = excluded.Info,
    List = excluded.List;
SELECT ID, Name, Info, List FROM sometable WHERE Name = @name