为什么try catch没有捕获Sql语法错误

时间:2012-01-06 21:11:17

标签: asp.net sql

我正在向我的网站添加一个输入框,我作为管理员可以输入sql select语句,我试着抓住执行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 :(得分: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";
}