参数用于防范 SQL 注入攻击。 不要将用户输入与 SQL 语句连接在一起,而是使用参数来确保输入只被视为文本值,从未执行过。 在 SQLite 中,通常允许在 SQL 语句中任何允许字面值的位置使用参数。
参数可以加上 :、@ 或 $ 作为前缀。
command.CommandText = "INSERT INTO user (name) VALUES ($name)";
command.Parameters.AddWithValue("$name", name);
有关 .NET 值如何映射到 SQLite 值的详细信息,请参阅 数据类型 。
截断
使用 Size 属性截断 TEXT 和 BLOB 值。
// Truncate name to 30 characters
command.Parameters.AddWithValue("$name", name).Size = 30;
替代类型
有时,可能需要使用备用 SQLite 类型。 通过设置 SqliteType 属性来实现。
可以使用以下备用类型映射。 有关默认映射,请参阅 数据类型。
| 价值 | SqliteType | 注解 |
|---|---|---|
| 字符型 | 整数 | UTF-16 |
| DateOnly | 真正 | 儒略日值 |
| DateTime | 真正 | 儒略日值 |
| 日期时间偏移 (DateTimeOffset) | 真正 | 儒略日值 |
| Guid | 团块 | |
| TimeOnly | 真正 | 以天为单位 |
| TimeSpan | 真正 | 以天为单位 |
command.CommandText =
@"
SELECT count(*)
FROM task
WHERE finished IS NULL
AND julianday('now') - julianday(started) > $expected
";
// Convert TimeSpan to days instead of text
command.Parameters.AddWithValue("$expected", expected).SqliteType = SqliteType.Real;
输出参数
SQLite 不支持输出参数。 而是返回查询结果中的值。