如何处理vb.net中的异常?

时间:2016-01-15 15:24:32

标签: asp.net vb.net exception

我正在创建一个程序,用户可以在其中搜索并添加所需的订单。我现在面临的问题是,当我抛出异常时,程序不会读取异常,因此用户将知道输入的id是否在数据库中。我将提供我正在处理的程序的代码片段。

enter image description here

2 个答案:

答案 0 :(得分:1)

<强>问题

  1. 如果数据库中不存在item_code,您的代码将抛出错误。它根本不会进入while循环。
  2. 这不是对异常的正确使用。如果找不到记录,则不是错误。检查item_code是否存在的正确方法是检查datareader是否有结果。
  3. 必须再次正确地为自己辩护SQL注入。通过连接sql查询,您可以解决一系列问题。例如,如果用户恶意输入以下文本,则会删除整个Products表:';DROP TABLE Products;-
  4. 您没有正确处置OleDbConnectionOleDbCommand个对象。如果发生异常,您的代码将不会运行Dispose()方法。这可能会导致您快速耗尽资源。
  5. <强>解决方案

    1. 您应该检查dataRead是否有任何行。如果没有,那么你可以通过javascript警告用户。像这样:

      If dataRead.HasRows Then
          //READ DATA
      Else
          //ALERT USER
      End If
      
    2. 解决方案#1地址问题#2

    3. 使用参数化查询。 .NET框架将阻止这些类型的攻击(SQL注入)。

      selectProductQuery = "SELECT * FROM Products WHERE item_code = @item_code"
      ...
      newCmd.Parameters.AddWithValue("item_code", txtItemCode.Text);
      
    4. 在使用块中包装实现Dispose()的所有对象。无论是否抛出错误,都可以保证一切都得到妥善处理。

      Using newCon As New OleDbConnection(....)
          Using newCmd As New OleDb.OleDbCommand(...)
              ...
          End Using
      End Using
      
    5. 说实话,你的代码有一些“错误”,但这应该让你朝着正确的方向前进。

答案 1 :(得分:0)

该行:

Response.Write(<script>alert('The ...')</script>)

需要(注意引号):

Response.Write("<script type='text/javascript'>alert('The ...')</script>")

顶部的另一个相同,但我认为这不会解决您的整体问题。

相反,使用这样的javascript:

if(!alert('Whoops!')){window.location.reload();}

弹出警告框,然后在点击按钮后重新加载页面。