Почему попытаться поймать не поймать ошибку синтаксиса Sql - PullRequest
0 голосов
/ 07 января 2012

Я добавляю поле ввода на свой сайт, где я, как администратор, могу вводить операторы sql select, я помещаю попытку поймать код, который выполняет выбор, чтобы попытаться поймать синтаксические ошибки, но даже с этим мой сайт переходит к «ошибка в приложении /» при синтаксической ошибке.

Я не понимаю, что я делаю неправильно. Я занимаюсь разработкой на 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";
 }

Вместо этого, если на ярлыке отображается сообщение об ошибке, сайт выдает ошибку и переходит на страницу ошибок сайта по умолчанию.

1 Ответ

0 голосов
/ 16 января 2012

Уловка в приведенном выше коде действительно перехватывает исключение.В качестве исключения установите для команды выбора значение по умолчанию, которое обязательно будет работать, т.е.

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";
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...