1

我正在尝试学习使用 SQLite,但我感到非常沮丧和困惑。我已经找到了 System.Data.SQLite,这显然是 C# 中用于 SQLite 的东西。

该网站没有任何文档。从 2010 年起显然已经过时的“原始网站”也没有文档。我可以找到一些博客教程,但据我所知,他们的操作方法基本上是:

  1. 初始化数据库连接。
  2. 将 SQL 语句馈送到连接中。
  3. 取出来自连接的东西。
  4. 关闭连接。

我不想在我的 C# 代码中编写 SQL 语句,它们很丑陋,而且我没有从 IDE 获得任何帮助,因为我必须将 SQL 代码放在字符串中。

我不能只是:

  • 创建一个DataSet.
  • 告诉DataSet它它应该对应于 SQLite 数据库MyDB.sqlite
  • DataSet使用其成员函数来操作。
  • 不用担心 SQLite,因为它会DataSet自动与磁盘上的 SQLite 数据库保持同步。

我知道我可以DataSet用数据库的内容填充 a,但如果我想访问整个数据库,我将不得不用它的DataSet所有内容填充。如果我的数据库是 1 GB,我刚刚用完了 1 GB 的 RAM(更不用说一次写入所有这些所需的时间)。

我不能简单地建立一个 SQLite 数据库连接并假装它只是一个普通的DataSet(可能需要偶尔询问它是否已经完成同步)?

4

3 回答 3

2

这个问题的答案是否定的。
不,您不能简单地将 SQLite 连接假装它只是一个数据集。

如果您不想编写 SQL 语句,请考虑使用实体框架。
将 SQLite 嵌入式数据库与实体框架和 Linq-to-SQL 一起使用

于 2012-12-20T14:22:42.040 回答
1

您不应该将 aDataSet视为数据库。这只是查询的结果。

您查询数据库以获取数据子集(您永远不需要数据库中的所有数据),并且该子集用于填充您的DataSet.

您需要手动同步更改,因为DataSet不知道哪些更新应该是哪个事务的一部分。这是您的系统知识。

于 2012-12-20T13:11:04.673 回答
0

DataSet 是内存缓存,只有在开发人员允许时才会同步到底层数据存储。您可以放置​​一个计时器包装器并按计划执行,但您仍然需要手动保持数据集和数据存储同步。

不建议存储 1GB 以上的数据,因为内存使用率会很高,性能会很低。你也不想通过网络发送这么多的数据,或者上帝禁止互联网连接。

为什么要在内存中保留 1GB 的数据?

于 2012-12-20T13:10:36.053 回答