【问题标题】:How do you save a hashset to a SQLite Db in c#如何在 c# 中将哈希集保存到 SQLite Db
【发布时间】:2020-07-25 17:36:21
【问题描述】:

我希望使用 SQLite 来保存和检索自定义玩家数据。这将在播放器登录时加载并在更改时保存。

我发现我只有 4 种类型可供我使用:

空。该值为 NULL 值。

整数。该值是一个有符号整数,存储在 1、2、3、4、6 或 8 中 字节数取决于值的大小。

真实。该值是一个浮点值,存储为 8 字节 IEEE 浮点数。

文本。该值是一个文本字符串,使用数据库编码存储 (UTF-8、UTF-16BE 或 UTF-16LE)。

BLOB。该值是一团数据,完全按照输入的方式存储。

现在看起来可以使用 BLOB 了?但是如何将哈希集保存为 blob 并将其加载为哈希集?还是我做错了?

hashset 将是一个访问过的航路点列表(使用 hashset 消除任何重复),基于以下模型:

 public class WaypointObject
{
    public string MapName { get; set; }
    public Point WaypointLocation { get; set; }
    public string WorldName { get; set; }
}

并且将从中保存、加载到

public HashSet<WaypointObject> waypoints = new HashSet<WaypointObject>();

我在 mo 的 sqlite 上尽我所能学习,我确定一定有办法吗?但我不知道该怎么做。

任何帮助表示赞赏

【问题讨论】:

  • A) 哈希集是一个集合,因此您可能希望将每个项目保存为自己的行。 B) NET DB Provider 大大扩展了支持的数据类型。请参阅 SQLite not storing decimals correctly C) 请不要包含不相关的标签 - 您的问题与 Visual Studio 无关
  • a) 不确定每个项目在自己的行中,每个玩家不会有自己的行,因为每个玩家都会有自己唯一的哈希集 "list",除非你的意思是 5 列:playername - 地图名称 - 航点 x - 航点 y - 加载时的世界名称检索所有匹配玩家名称的条目并将它们添加到哈希集中。但是,您如何防止它在每次保存时再次保存相同的内容。非常困惑的 b 和 c:我是一个业余爱好者,我只在我在 Visual Studio 中使用 system.data.sqlite 进行大量搜索后找不到解决方案时才问,我认为这是相关的
  • 你的意思是每个玩家都有一个waypointdb吗?嗯,这是可能的,我认为太多的文件会是一个问题,一个会更好 - 但是出于其他原因,每个玩家一个会更好。

标签: c# sqlite visual-studio-2019 hashset


【解决方案1】:

下面的代码试试可以解决

using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) ) 
{
     db.InsertAll(waypoints);
    //For insert
      db.UpdateAll(waypoints);
    //for update
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2012-04-20
    • 2017-02-13
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多