2012-01-06 8 views
-5

私は管理者としてsql select文を入力できる私のサイトにinputboxを追加しています。selectを実行して構文エラーをキャッチしようとしましたしかしこの場合でも、私のサイトは構文エラーがあると "application/error"ページに行きます。tryがキャッチしないSQL文の構文エラー

私は間違っていることを理解していません。私はAsp.net v4で開発しています。

カスタムSQLコマンドを実行するコードは次のとおりです。

try 
{ 
     //edtSQL.Text = "WHRE Field='Value'" 
     //The Resulting SQL Command will be incorrect because of incorrect syntax 
     SqlDataSource1.SelectCommand = "SELECT * FROM DataTable " + edtSQL.Text; 
     SqlDataSource1.Select(new DataSourceSelectArguments()); 
} 
catch(Exception ex) 
{ 
     //Bad Syntax should be caught here, but it is not. This never get called 
     // even when there is a syntax error. 
     lblQueryStatus.Text = "Error, can't execute SQL statment"; 
} 

エラーメッセージを示すラベルが表示されている場合、サイトでエラーが発生し、デフォルトのサイトエラーページに移動します。

+0

のようになります/ – Arbiter

+1

あなたは、例外が他の場所でスローされていないことを確認していますか?あなたはすべての例外や 'SqlException'だけをキャッチしていますか? –

+2

関連コードを投稿してください。何が起こると思いますか? – Oded

答えて

0

上記のコードのcatchが実際に例外をキャッチします。例外では、Select Commandを何かデフォルトに設定してください。つまり、正常に動作します。

SELECT * FROM Database 

そして、選択を実行します。この理由は、ページがポストバックを実行して、それに設定されているselectステートメントを実行しようとしたときで、これを回避しようとしていない(別のコンテキストで)ため、サーバーがデフォルトの"アプリケーションのエラー/"ページ。

コードはボタンのためにあなたのクリックハンドラに具体的には、あなたのコードを提供することができ、この

try 
{ 
    //edtSQL.Text = "WHRE Field='Value'" 
    //The Resulting SQL Command will be incorrect because of incorrect syntax 
    SqlDataSource1.SelectCommand = "SELECT * FROM DataTable " + edtSQL.Text; 
    SqlDataSource1.Select(new DataSourceSelectArguments()); 
} 
catch(Exception ex) 
{ 
    SqlDataSource1.SelectCommand = "SELECT * FROM DataTable"; //This will work for sure 
    SqlDataSource1.Select(new DataSourceSelectArguments()); 
    lblQueryStatus.Text = "Error, can't execute SQL statment"; 
} 
+0

メモでは、間違いなくSqlParametersを使用する必要があります。 '' SELECT * FROM DataTable "+ edtSQL.Text;'は、注射攻撃のために広く開いています。 – Will

+0

ありがとうございます。私はそれをどうやって行うのかを見ていきます。 –