SQLite3 - 在C#中存储可变大小的arraylists

时间:2013-11-08 20:53:50

标签: c# database-design sqlite .net-4.5

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

以下是我可以看到的可用数据类型,可能使用: integer,int,smallint,tinyint,bigint,bit,varchar(50),nvarchar(50),text,ntext,image,money, float,real,decimal,numeric(18,0),char(10),nchar(10),datetime,guid。

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以按照建议序列化对象 - 尽管这会破坏关系数据库的重点。

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

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

答案 1 :(得分:0)

我最终使用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);
}

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

特别感谢这些荒谬难以找到的链接:

Cannot find JavaScriptSerializer in .Net 4.0

Json string deserialized to array list of objects