关于C#中SQLite的使用记录

331 阅读2分钟

前言

在搭建的WPF架构中使用到SQLite数据库,并创建表、设计表来获取SQLite数据库中的数据。之前仅简单的使用SQLite获取数据,没有详细了解与应用,今天详细了解与优化一下使用!

SQLite表的设计介绍

image.png 可以从图片看到,设计表时对应的类型有四种,INTEGER\TEXT\REAL\BLOB共四种类型。

  • INTEGER: 用于存储整数。SQLite中的整数类型可以存储非常宽的范围,通常是64位的。
  • REAL: 用于存储浮点数。在SQLite中,REAL类型通常用于存储双精度浮点数。
  • TEXT: 用于存储文本数据。TEXT类型可以存储任意长度的字符串。
  • BLOB: 用于存储二进制数据。BLOB类型可以存储二进制大对象,例如图片或文件。 根据上述介绍,我们可以将我们需要数据进行划分,由上图转变为下图:

image.png 我们将价格改为了浮点型数据使用,同时将尺寸改为整数型。 那么对于SQLite的不同类型如何和C#数据进行转化呢?

数据转化

C#数据存入SQLite

我们定义了string Name,double Price。

string sql = "insert into DataInfo_tab (Name,Price) values ('" + Name +  "','" + Price + "')";

通过编写SQLite的SQL语句,将对应的数据直接放入,然后再使用ExecuteNonQuery()以及事务保存,就可以将对应的数据进行存储,这里没有过多的数据转化问题。

SQLite数据转为C#数据

这里我使用了SQLiteDataAdapter从 SQLite 数据库检索数据并填充到数据集(DataSet)或数据表(DataTable)中的一个类。然后定义一个DataTable接受读取得到的数据。

image.png 通过得到的DataTable再做后续的行列数值读取。例如:

DataTable dt1 = 数据库数据转化得到的数据;
Name = dt1.Rows[i]["Name"].ToString();//针对实际定义进行转化

后续可根据具体C#定义好的类型进行转化。

遇到问题

在使用SQL读取对应的数据时,出现的问题。 想读取表中id最大数,正确的SQL语言为: "select * from DataInfo_tab where id = (SELECT MAX(id) FROM DataInfo_tab WHERE id IS NOT NULL)"

SQLiteException: SQL logic error or missing database misuse of aggregate: max()

max()的用法不准确。

SQLiteException: SQL logic error or missing database near ")": syntax error SQLite的语句写法多了一个)。

从错误提示来看,整体对SQLite的使用方面还有待加强!


总结

以上就是今天要讲的内容,本文仅仅记录了使用SQL与C#之间使用问题记录。