パラメーター
パラメーターを使用して SQL インジェクション攻撃から保護します。 ユーザー入力を SQL ステートメントと連結する代わりにパラメーターを使用することで、入力がリテラル値として扱われ、実行されないようにします。 SQLite では、通常、SQL ステートメント内でリテラルを使用できるすべての場所でパラメーターを使用できます。
パラメーターには、:
、@
、または $
のいずれかのプレフィックスを付けることができます。
command.CommandText =
@"
INSERT INTO user (name)
VALUES ($name)
";
command.Parameters.AddWithValue("$name", name);
.NET 値がどのように SQLite 値にマップされるかについて詳しくは、「データ型」を参照してください。
切り捨て
TEXT と BLOB の値を切り捨てるには、Size プロパティを使用します。
// Truncate name to 30 characters
command.Parameters.AddWithValue("$name", name).Size = 30;
代替型
ときにより、代替の SQLite 型を使用する必要が生じる場合があります。 これを行うには、SqliteType プロパティを設定します。
使用できる代替型マッピングは次のとおりです。 既定のマッピングについては、「データ型」を参照してください。
[値] | SqliteType | Remarks |
---|---|---|
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 では、出力パラメーターはサポートされません。 代わりに、クエリ結果の中で値を返します。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET