Параметры
Параметры используются для защиты от атак путем внедрения кода 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 | Вещественное число | Значение дня по юлианскому календарю |
Дата/время | Вещественное число | Значение дня по юлианскому календарю |
DateTimeOffset | Вещественное число | Значение дня по юлианскому календарю |
GUID | BLOB-объект | |
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 не поддерживает выходные параметры. Вместо этого используются возвращаемые значения в результатах запроса.