2016-01-15 83 views
0

我正在創建一個程序,用戶可以在其中搜索並添加其所需的順序。我現在面臨的問題是,當我拋出異常時,程序不會讀取異常,以便用戶知道輸入的ID是否在數據庫中。我將提供我正在開發的程序的代碼片段。在asp.net web表單中處理異常

enter image description here

+2

請將代碼發佈爲文本而不是屏幕截圖 –

+0

我建議您放置一個斷點並查看實際發生的情況。我敢肯定,你會注意到沒有發生異常,並且你只是沒有進入while循環。另外,閱讀sql注入,你有安全風險。 –

回答

1

問題

  1. 您的代碼將拋出一個錯誤,如果item_code不存在於數據庫中。它將不會進入while循環。
  2. 這不是正確使用例外。如果沒有找到記錄,這不是錯誤。檢查item_code是否存在的正確方法是檢查數據讀取器是否有結果。
  3. 必須正確地捍衛自己再次SQL注入。通過連接sql查詢,你可以打開一大堆問題。例如,如果用戶惡意輸入以下文本,它將刪除整個Products表:';DROP TABLE Products;-
  4. 您沒有正確處理OleDbConnectionOleDbCommand對象。如果發生異常,您的代碼將不會運行Dispose()方法。這可能會導致您快速耗盡資源。

解決方案

  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 
    

要完全誠實的,有相當多的「錯誤」與您的代碼,但是這應該讓你在正確的方向前進。

0

行:

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

需要爲(注意引號):

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

同爲頂部的另外一個,但我不認爲這會解決您的整體問題。

相反,使用JavaScript這樣的:

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

彈出一個提示框,他們點擊按鈕後,再重新加載頁面。