参数
可以使用参数来防范 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 | 备注 |
---|---|---|
Char | 整数 | UTF-16 |
DateOnly | Real | 儒略日值 |
DateTime | Real | 儒略日值 |
DateTimeOffset | Real | 儒略日值 |
GUID | Blob | |
TimeOnly | Real | 以天为单位 |
TimeSpan | Real | 以天为单位 |
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 不支持输出参数。 改为返回查询结果中的值。