1

我从未尝试在我的 SQLite 数据库中存储任何对象,并且对该主题进行一些搜索并没有帮助。我正在使用 VS 2012、NuGet SQLite DLL 和带有 .NET 4.5 的 C#。

以下是我可以看到并可能使用的可用数据类型:integer、int、smallint、tinyint、bigint、bit、varchar(50)、nvarchar(50)、text、ntext、image、money、float、real、decimal、数字(18,0),字符(10),nchar(10),日期时间,guid。

我有必须为每个图形存储的图形点 (x, y)。有可变数量。我目前将这些值存储到一个 ArrayList 中,并且很难弄清楚如何存储它们......

如果我只为存储所有 (x, y) 点的每个图形创建一个专用表,我如何指定可变数量的 (x, y) 坐标以保存在图形表中?使用第三方库有更简单的方法吗?谁能想到另一个更简单的解决方案,也许使用我目前可用的技术?

谢谢!

4

2 回答 2

2

您可以按照建议序列化对象 - 尽管这种方式会扼杀关系数据库的意义。

或者您可以使用数据库关系。

Graph

-id integer
-varchar(50) name


GraphPoints
-GraphID int FK to Graph
-x int
-y int

然后只需将两者连接起来,您就可以获得表格的所有积分:

SELECT * FROM Graph g INNER JOIN GraphPoints gp on g.id = gp.GraphID
WHERE g.id = somegraphid
于 2013-11-08T21:52:03.290 回答
1

我最终使用了 JSON,因为它比仅为我的图形坐标创建整个表更容易管理并且代码少得多,这似乎是适合我的情况的最佳途径。希望这对将来的人有所帮助!

[Serializable]
public class Coordinate
{
    public string x { get; set; }
    public string y { get; set; }

    public Coordinate() {}
}

public class CoordinateList
{
    public List<Coordinate> Coordinate { get; set; }
}

这是一个简单的工作示例,说明如何创建上述类并将其序列化为 JSON 字符串,您可以将其存储为 SQLite 3 中的 TEXT 或 VARCHAR 类型。还包括如何反序列化。

CoordinateList list = new CoordinateList();
list.Coordinate = new List<Coordinate>();
Coordinate cord = new Coordinate();
cord.x = "1";
cord.y = "10";
list.Coordinate.Add(cord);
list.Coordinate.Add(cord);
list.Coordinate.Add(cord);

JavaScriptSerializer serializer = new JavaScriptSerializer();
String jsonStr = serializer.Serialize(list);
MessageBox.Show("json:" + jsonStr);
list = serializer.Deserialize<CoordinateList>(jsonStr);
foreach (Coordinate c in list.Coordinate)
{
    MessageBox.Show("x: " + c.x + ", y: " + c.y);
}

PS JavaScriptSerializer 包含在 System.Web.Extentions 参考中。我一直在寻找 System.Web.Script.Serialization 命名空间,但找不到。

特别感谢这些很难找到的链接:

在 .Net 4.0 中找不到 JavaScriptSerializer

Json字符串反序列化为对象数组列表

于 2013-11-09T03:23:03.943 回答