一、安装 sqlite‑net 库
三种安装方式:
- NuGet图形界面:搜索包名
sqlite‑net安装 - 直接引入源码文件
下载:https://raw.githubusercontent.com/praeclarum/sqlite-net/master/src/SQLite.cs
新建SQLite.cs放到项目里,命名空间:using SQLite
- 包管理器控制台命令
Install-Package sqlite-net-pcl -Version 1.4.118Code language: CSS (css)
二、定义实体类 Person
using SQLite;
public class Person
{
[PrimaryKey, AutoIncrement] //主键、自增
public int Id { get; set; }
public string Name { get; set; }
}Code language: JavaScript (javascript)
三、创建数据库、打开连接、建表
// 获取手机本地存储文件夹
string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
//拼接数据库完整路径
var db = new SQLiteConnection(System.IO.Path.Combine(folder, "myDb.db"));
// 如果表不存在,就创建Person表;已存在不会重复创建
db.CreateTable<Person>();Code language: JavaScript (javascript)
按钮点击完整示例
private void Btn_Click3(object sender, EventArgs e)
{
string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var db = new SQLiteConnection(System.IO.Path.Combine(folder, "myDb.db"));
db.CreateTable<Person>();
}Code language: JavaScript (javascript)
四、新增数据 Insert()
string dbPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),"ormdemo.db3");
var db = new SQLiteConnection(dbPath);
Person p = new Person { Name = "黄飞鸿" };
int newId = db.Insert(p);
//返回值:成功返回新记录自增IdCode language: JavaScript (javascript)
五、查询单条数据 Get()
// 根据条件查询一条
var per = db.Get<Person>(m => m.Id == 1);Code language: JavaScript (javascript)
六、删除数据 Delete()
//传入主键Id,删除这条记录
var count = db.Delete<Person>(1);
//返回受影响行数,删除成功返回1Code language: JavaScript (javascript)
实体特性(标记在模型类的类/属性上方)
| 特性 | 作用说明 |
|---|---|
[PrimaryKey] | 设置整数属性为主键,不支持复合主键 |
[AutoIncrement] | 整数主键,新增数据时自动自增 |
[Column(name)] | 修改数据库里的列名,默认和C#属性名一致 |
[Table(name)] | 修改数据库表名,默认和C#类名一致 |
[MaxLength(value)] | 限制文本最大长度;数据库不会强制拦截,代码层要自己校验 |
[Ignore] | 忽略该属性,不会创建数据库字段(比如集合、内存临时属性) |
[Unique] | 该列的值必须唯一,不能重复 |
例子
[Table("Person")]
public class Person
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[Column("UserName"), MaxLength(20), Unique]
public string Name { get; set; }
[Ignore]
public string TempData { get; set; } // 不会存入数据库
}Code language: JavaScript (javascript)
LINQ 方式查询数据库
使用LINQ语法,不需要手写SQL语句
// from ... where ... select 查询
var personsNamedMathieu = from p in db.Table<Person>()
where p.Name == "Mathieu"
select p;
// FirstOrDefault() 获取第一条,没有则返回null
Console.WriteLine(">", personsNamedMathieu.FirstOrDefault().Name);Code language: JavaScript (javascript)
直接执行原生SQL
用 db.Query<T>(),使用?做占位符,防止SQL注入
var personsNamedMathieu = db.Query<Person>(
"SELECT * FROM Person WHERE Name = ?",
"Mathieu");
foreach (var p in personsNamedMathieu)
{
Console.WriteLine("p: " + p.Name);
}Code language: PHP (php)
Previous: SQLite数据库的使用