パラメーター

パラメーターを使用して 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 では、出力パラメーターはサポートされません。 代わりに、クエリ結果の中で値を返します。

関連項目