Parametry
Parametry są używane do ochrony przed atakami polegającymi na wstrzyknięciu kodu SQL. Zamiast łączyć dane wejściowe użytkownika z instrukcjami SQL, użyj parametrów, aby upewnić się, że dane wejściowe są traktowane tylko jako wartość literału i nigdy nie są wykonywane. W programie SQLite parametry są zwykle dozwolone w dowolnym miejscu, w których literał jest dozwolony w instrukcjach SQL.
Parametry mogą być poprzedzone prefiksem , :
@
lub $
.
command.CommandText =
@"
INSERT INTO user (name)
VALUES ($name)
";
command.Parameters.AddWithValue("$name", name);
Zobacz Typy danych, aby uzyskać szczegółowe informacje na temat sposobu mapowania wartości platformy .NET na wartości SQLite.
Obcinania
Size Użyj właściwości , aby obcinać wartości TEXT i BLOB.
// Truncate name to 30 characters
command.Parameters.AddWithValue("$name", name).Size = 30;
Typy alternatywne
Czasami warto użyć alternatywnego typu SQLite. W tym celu należy ustawić SqliteType właściwość .
Można użyć następujących mapowań typów alternatywnych. Aby zapoznać się z domyślnymi mapowaniami, zobacz Typy danych.
Wartość | SqliteType | Uwagi |
---|---|---|
Char | Integer | UTF-16 |
DateOnly | Rzeczywista | Wartość dnia juliana |
DateTime | Rzeczywista | Wartość dnia juliana |
DateTimeOffset | Rzeczywista | Wartość dnia juliana |
Identyfikator GUID | Obiekt blob | |
TimeOnly | Rzeczywista | W dniach |
przedział_czasu | Rzeczywista | W dniach |
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;
Parametry wyjściowe
SqLite nie obsługuje parametrów wyjściowych. Zamiast tego zwracaj wartości w wynikach zapytania.