使用命名空间
using Microsoft.Data.Sqlite;创建连接
SqliteConnection dbc = new("Data Source=:memory:"); // 内存模式
SqliteConnection dbc = new("Data Source=/path/to/xxx.db");
dbc.Open(); // 异步方式:dbc.OpenAsync();
if (dbc.State == System.Data.ConnectionState.Open) {
//...
}创建SQL指令
普通指令
SqliteCommand cmd = new("SELECT * FROM Users;", dbc);带参数指令
// 创建指令
SqliteCommand cmd = new("INSERT INTO Users VALUES (@Name, @Age);", dbc);
// 定义参数
cmd.Parameters.Add(new SqliteParameter("@Name", typeof(string)));
cmd.Parameters.Add(new SqliteParameter("@Age", typeof(int)));
// 可随时更改参数值
cmd.Parameters["@Name"].Value = "蔡徐坤";
cmd.Parameters["@Age"].Value = 25;执行SQL指令
ExecuteReader
用于执行返回多行结果的查询语句(如
SELECT语句)。
/* SELECT * FROM Voices; */
SqliteDataReader reader = await cmd.ExecuteReaderAsync();
await reader.ReadAsync();
while (await reader.ReadAsync()) {
// 处理每一行数据
string result = reader.GetString(0); // 取第一列
// ...
}ExecuteScalar
用于执行返回单个值的查询,通常是一个聚合函数的结果,如
COUNT(),SUM(),MAX(),MIN()等,或者是只返回一行一列的查询。
/* SELECT COUNT(*) FROM Voices; */
object result = await cmd.ExecuteScalarAsync(); // 失败返回null
int count = Convert.ToInt32(result);ExecuteNonQuery
用于执行不返回任何数据的命令,如
INSERT,UPDATE,DELETE以及创建或修改数据库结构的 CREATE TABLE, ALTER TABLE 等DDL语句。
/* INSERT INTO Users VALUES (@Name, @Age); */
int 影响了行数据 = await cmd.ExecuteNonQueryAsync();