2017-02-21 4 views
0

を持っていない私は、しかし、お問い合わせには私をからかってSQLiteExceptionを自分のアプリケーションのいくつかのデータベースの情報を希望例外がスローされます。SQLiteはいえCommandTextをがエラー

ここに例外からのメッセージがあります。

SQLロジックエラーまたは欠落しているデータベース

の近くに "ORDER":構文エラー

私はそれが罰金を働いた、SQLiteのブラウザでコマンドテキストをテストしました。コードでは、例外がスローされます。

ここに私が使用したコードがあります。

// Database Requesting Point 
    // using(var DB = new SQLiteHandler()) skipped 

    var QueryText = string.Format(
     "SELECT seq, title, written_date FROM pblog_board WHERE category={0} ORDER BY seq DESC LIMIT {1}" 
     , Target, Requests 
     ); // Complete Command Text 
    var Reader = DB.ExecuteReader(QueryText, null); 

...そして、これは私は、これはSQLiteのライブラリーのグリッチではないことを願うのExecuteReader(文字列、パラメータ[])とクエリ(文字列、パラメータ[])

public SQLiteDataReader ExecuteReader(string CommandText, CommandParameter[] Parameters) 
{ 
    var Command = Query(CommandText, Parameters); 
    return Command.ExecuteReader(); 
} 

private SQLiteCommand Query(string CommandText, CommandParameter[] Parameters) 
{ 
    SQLiteCommand Command = new SQLiteCommand(_currentConnection); 
    Command.CommandType = System.Data.CommandType.Text; 
    Command.CommandText = CommandText; 

    if (Parameters != null) 
     for (int i = 0; i < Parameters.Length; i++) 
     { 
      Command.Parameters.Add(new SQLiteParameter(
        parameterName: Parameters[i].ParameterName, 
        value: Parameters[i].ParameterValue 
       )); 
     } 

    return Command; 
} 

です。私は間違ってコーディングしましたか?

答えて

1

問題のパラメータはTargetRequestsです。ダイレクトDBコールが成功したらどうしますか?

string.Format(..)を使用する代わりに、クエリをパラメータ化して値を注入する必要があります。あなたはstring.Format(..)を使って自分自身をSQLインジェクションまで開いています。

+0

申し訳ありませんが、私は自分のクエリをパラメータ化しました。私は注射脆弱性があるのを見ていませんでした:)....そして問題は解決しました。 'Target'と' Requests'は 'null 'なので問題を出しました!ありがとうございました。 –

関連する問題